이것은 제 생각에 간단한 질문입니다.
다음과 같이 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.