> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 여러 줄 플래그(/m/)가 정규 표현식의 개행 문자와 일치하지 않는 이유는 무엇입니까?

JavaScript의 여러 줄 플래그(/m/)가 정규 표현식의 개행 문자와 일치하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-08 08:00:02
원래의
852명이 탐색했습니다.

Why Does JavaScript's Multiline Flag (/m/) Fail to Match Newlines in Regular Expressions?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿