web-dev-qa-db-ja.com

正規表現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');     
 }          

これは?文字のために機能しません。..\でエスケープしようとしましたが、機能しません。特殊文字としてではなく、?をそのまま使用する別の方法はありますか?

75
Andrew

2つのバックスラッシュでエスケープする必要があります

\\?

詳細はこちらをご覧ください:

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

125
Jon

ダブルスラッシュを使用する必要があります。

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

どうして? JavaScriptでは、\は文字列内の文字をエスケープするためにも使用されるため、「\?」になる:"?"

"\\?""\?"になります

18
CMS

引用符の代わりにスラッシュで正規表現を区切り、疑問符をエスケープするために単一のバックスラッシュで区切ることができます。これを試して:

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

knownパターンがある(つまり、変数を使用してRegExpを構築しない)場合は常に、literalsingleバックスラッシュのみを使用して特別な正規表現メタ文字をエスケープする必要がある正規表現表記法:

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");

必読: RegExp:Description at MDN。

4