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

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

다음과 같이 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');
 }

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



답변

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

\\?

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

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


답변

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

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

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

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


답변

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

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


답변

알려진 패턴 이있을 때마다 (즉, 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.


답변