JavaScript에서 정규 표현식을 사용한 여러 줄 텍스트 추출
HTML에서는 태그 내에서 정보를 추출해야 하는 경우가 많습니다. 이를 수행하는 한 가지 방법은 정규식을 사용하는 것입니다. 그러나 JavaScript의 여러 줄 플래그(/m/)가 예상대로 작동하지 않을 수도 있습니다.
HTML 문자열에서 h1 태그 사이의 텍스트를 추출하는 것을 목표로 하는 다음 정규식을 고려하세요.
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi m = html.search(pattern); return m[1];
이 정규 표현식이 문자열 내에서 줄 바꿈(n)을 발견하면 null을 반환할 수 있습니다. 줄바꿈을 제거하면 이 문제가 해결되며, 이는 /m/ 플래그가 예상대로 작동하지 않음을 나타냅니다.
해결책: /s/(Dotall) 수정자
/m/ 플래그는 .가 아닌 ^ 및 $ 문자의 동작을 수정합니다. 따라서 문제는 . 성격. JavaScript는 /.../s 수정자(dotall 수정자라고도 함)를 제공하지 않습니다.
해결 방법
이 문제를 완화하기 위해 JavaScript 개발자는 문자를 사용할 수 있습니다. 클래스(예: s)와 해당 부정(S)을 함께 사용하면 nhù sau:
[\s\S]
이를 원래 정규식에 통합하면 다음이 생성됩니다.
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
이 표현식은 성공적으로 추출되어야 합니다. 줄바꿈이 있는 경우에도 HTML 문자열에서 원하는 텍스트를 찾습니다.
ES2018 업데이트
ES2018부터 JavaScript는 s(dotAll) 플래그를 도입했습니다. . 줄 바꿈과 일치합니다. 이렇게 하면 해결 방법이 필요하지 않습니다. 업데이트된 정규식은 다음과 같습니다.
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
이 수정은 s 플래그가 지원되는 최신 JavaScript 환경과의 호환성을 보장합니다.
위 내용은 JavaScript의 여러 줄 플래그(/m/)가 정규 표현식의 개행 문자와 일치하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!