정규식 자바 스크립트에서 물음표 이스케이프


90

이것은 제 생각에 간단한 질문입니다.

다음과 같이 JavaScript에서 정규식을 사용하여 다른 문자열에서 문자열의 발생을 검색하려고합니다.

 var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";

 var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");

 if(content.search(gent) != -1){   
     alert('worked');     
 }          

이것은 ?캐릭터 때문에 작동하지 않습니다 .... 나는 그것을 이스케이프하려고 시도했지만 그것도 \작동하지 않습니다. ?특수 문자 대신 문자 그대로 사용하는 다른 방법이 있습니까?


이것에 대한 최악의 부분은 정규 표현식 대신 문자열을 사용하더라도이 문제가 발생한다는 것입니다. 예를 들어 str.search("?")정규 표현식이 아니고 하나로 취급되지 않아야하기 때문에 확실히 버그처럼 보입니다. 🤦
Synetech

답변:


150

두 개의 백 슬래시로 이스케이프해야합니다.

\\?

자세한 내용은 다음을 참조하십시오.

http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm


17
… 하나는 정규식 용이고 다른 하나는 문자열 감소 용입니다.
Gumbo

마인드! 정규식으로 수년간 일한 끝에 모든 것을 봤다고 생각했습니다.하지만 아니, 여기 있습니다. 이중 탈출. 언젠가는 트리플을 보게 될 것 같아요.
Geo

26

이중 슬래시를 사용해야합니다.

var regex = new RegExp("\\?", "g");

왜? JavaScript에서는 \문자열에서 문자를 이스케이프하는데도 사용되므로 "\?" 된다 :"?"

그리고 "\\?",이된다 "\?"


16

따옴표 대신 슬래시로 정규 표현식을 구분 한 다음 물음표를 이스케이프하기 위해 단일 백 슬래시로 구분할 수 있습니다. 이 시도:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;

6

알려진 패턴 이있을 때마다 (즉, RegExp를 빌드하는 데 변수를 사용하지 않음) 특수 정규식 메타 문자를 이스케이프 하기 위해 단일 백 슬래시 만 사용하면되는 리터럴 정규식 표기법을 사용합니다 .

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

RegExp를 동적으로 빌드해야 할 때마다 리터럴 백 슬래시를 나타 내기 위해 이중 백 슬래시를 사용해야 하는 RegExp생성자 표기법 을 사용하십시오 .

var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");

그리고 String.raw문자열 리터럴 을 사용하는 경우 그대로 사용할 수 있습니다 \(정규식 패턴에 변수를 넣을 수있는 템플릿 문자열 리터럴 사용 예제 참조).

const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g

반드시 읽어야 할 것 : RegExp : Description at MDN.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.