>웹 프론트엔드 >JS 튜토리얼 >RegExp 생성자를 사용할 때 문자열을 두 번 이스케이프해야 하는 이유는 무엇입니까?

RegExp 생성자를 사용할 때 문자열을 두 번 이스케이프해야 하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 03:04:13615검색

Why Do I Need to Escape Strings Twice When Using the RegExp Constructor?

RegExp 생성자에 문자열을 두 번 이스케이프해야 하는 이유

RegExp 생성자를 사용하여 정규 표현식을 생성할 때 단일 이스케이프 문자()는 다음과 같습니다. s(공백)와 같은 특수 문자에는 충분하지 않습니다. 이러한 문자가 올바르게 해석되도록 하려면 이중 이스케이프()가 필요합니다.

이 요구 사항은 RegExp 생성자에 전달된 문자열이 처음에 일반 문자열 리터럴로 처리되기 때문에 발생합니다. 문자열 리터럴 내에서 이스케이프 문자 역할을 하여 s와 같은 특수 문자를 문자 그대로 포함할 수 있습니다. 그러나 정규식을 구성할 때 첫 번째 이스케이프 문자는 문자열 리터럴 구문 분석 프로세스 중에 사용됩니다.

다음 예를 고려하십시오.

const foo = "foo";
const string = '(\s|^)' + foo;
console.log(string);

이 예에서 의도된 정규식은 다음과 같습니다. (s|^) 다음에 foo 값이 옵니다. 그러나 s 이전의 단일 이스케이프는 문자열 리터럴 구문 분석에 의해 사용됩니다. 이로 인해 문자열(s|^)이 foo와 연결되는데 이는 유효한 정규 표현식이 아닙니다.

이러한 오해를 방지하기 위해 이중 이스케이프()가 사용됩니다. 첫 번째 이스케이프 문자는 문자열 리터럴 구문 분석에 사용되며, 두 번째 이스케이프 문자는 다음 문자가 정규식의 일부이므로 정규식으로 해석되어야 함을 나타냅니다.

const foo = "foo";
const string = '(\s|^)\' + foo;
console.log(string);

이 경우 의도된 문자는 정규식(s|^) 다음에 foo가 올바르게 구성되었습니다. 이중 이스케이프를 사용하면 특수 문자가 문자열 리터럴의 일부가 아닌 정규식의 일부로 처리됩니다.

위 내용은 RegExp 생성자를 사용할 때 문자열을 두 번 이스케이프해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.