100

これは私が考える簡単な質問です。

次のように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');     
 }          

これは?キャラクターのせいでうまくいきません....でエスケープしようとしました\が、それもうまくいきません。?特殊文字の代わりに文字通り使用する別の方法はありますか?

4

4 に答える 4

164

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

\\?

詳細については、これを参照してください。

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

于 2009-05-20T20:08:09.037 に答える
28

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

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

なんで?JavaScript では\、文字列内の文字をエスケープするためにも使用されるため、"\?" になります:"?"

"\\?"となり 、"\?"

于 2009-05-20T20:09:50.860 に答える
17

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

var gent = /I like your Apartment. Could we schedule a viewing\?/g;
于 2009-05-20T20:14:08.760 に答える
6

既知のパターンがある場合 (つまり、変数を使用して RegExp を作成しない場合) は常に、特殊な正規表現メタ文字をエスケープするために1 つのバックスラッシュのみを使用する必要があるリテラル正規表現を使用します。

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

動的に RegExp を構築する必要があるときはいつでも、リテラルのバックスラッシュを示すためにバックスラッシュを 2 つ使用しなければならない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.

于 2016-02-02T07:26:36.493 に答える