2017-06-06 10 views
-1

私はこの文字列を持っている:私はまさにそれを一致させる必要があるが正確に

var str = "https://www.mysite.se/this-match?ba=11" 

を、これだけthis-matchマッチ、(/?間)ないthis-maか何か(短い)ことthis-matchに含まれています。 すなわち:

var myre = new RegExp('\/this-ma\?'); 

はまだ一致します

myre.exec(str)[0] 
"/this-ma" 

は、どのように私はthis-matchに含まれる短い文字列が一致するものを与えないことを避けることができますか?

+0

「this-match」だけが一致するようにしたい場合は、なぜ「this-ma」を供給していますか? –

+0

@ NeeLunnときどき私は 'this-match'に含まれる可能性のある同様の文字列を持っているので – user1665355

+0

いいえ、私はそれを手に入れません。完全一致または同様の文字列。どちらですか?本当にはっきりしない。 –

答えて

2

あなたの正規表現の定義が間違っています。 \?は、貪欲ではない修飾語ではなく、リテラル?と一致すると思います。違います。実際には正反対です。ここ

var myre = new RegExp('\/this-ma\?'); 
> /\/this-ma?/ 

バックスラッシュは文字列リテラル内で動作し、正規表現に単一?を出力し、非貪欲修飾子なります。正規表現リテラルを使用します。

var myre = /\/this-ma\?/ 
+0

をチェックすることができます。文字列にパターンを定義する場合は、二重バックスラッシュを使用することもできます。 –

+0

@Sergio Tulensevこのように? 'var myre = new RegExp( '\/this-ma \\?');' – user1665355

+0

@ user1665355:regexesを動的に構築しているのなら、そうです。静的な場合は、正規表現のリテラルを好むべきです –