카테고리 없음

[자바 스크립트] 정규식을 사용하여 글꼴 태그 내의 텍스트 캡처

행복을전해요 2021. 2. 1. 12:07

<font>(.*?)</font> 점이 줄 바꿈과 일치하지 않기 때문에 작동하지 않습니다. [\s\S]

<font>([\s\S]*?)</font>

참고 : 코드에서 슬래시를 이스케이프하는 것을 잊지 마십시오.

<font>의 후손 인 태그 를 찾으 <td class="example">려면 항상 다음 위치에 있는지 확인해야하므로보다 복잡한 패턴을 얻을 수 있습니다 <td>.

<td class="example">(?:(?=([^<]+|<(?!\/td>|font)))\1)*<font>([\s\S]*?)<\/font>

이 패턴은 태그 앞에 <td>다른 태그가없는 경우에만 작동합니다 .<td><font>

패턴 세부 사항 :

이 부분은 <font>태그 앞에 허용되는 콘텐츠를 설명합니다 .

(?:                         # open a non capturing group
    (?=                     # open a lookahead
            (                   # open the capture group 1
                        [^<]+           # all that is not a <
                                  |                 # OR
                                              <(?!\/td>|font) # a < not followed by /td> or font
                                                      )                   # close capture group 1
                                                          )                       # close the lookahead
                                                              \1                      # backreference to capture group 1
                                                              )*                          # close the non capturing group
                                                              

이것은 원자 그룹 (?>...) (자바 스크립트에서 사용할 수없는 기능) 을 에뮬레이트하는 트릭 입니다. 정규식 엔진이 역 추적 할 수없는 내부 그룹입니다. 이 기능은 여기에 필요한 단순한 하위 패턴 (?:[^<]+|<(?!\/td>|font))*치명적인 역 추적을 유발할 수 있기 때문 입니다.

트릭 은 예견 단언 의 내용 이 자연 스럽다는 사실을 사용합니다 . 내용은 예견 내의 캡처 링 그룹 내부에 설명되며, 예견의 닫는 괄호 뒤에 캡처 링 그룹에 대한 역 참조를 넣습니다. \1한 번만 수정 된 캡처를 말하며 문제없이 반복 할 수 있습니다.

-------------------

정규식을 요청한 것을 알고 있지만 정규식은 HTML 구문 분석에 적합한 도구가 아닙니다. jQuery는 쿼리를 매우 간단하게 만듭니다.

$("TD.example > font").text()


출처
https://stackoverflow.com/questions/22049833