1

小さな正規表現について質問があります。文で、1 つまたは複数の単語に一致させたいのですが、前後に使用できる文字はオプションのスペース文字だけです。

例: 文では、特に探している場合を除き、一致させUt volutpat egestas volutpat.たいと思います。volutpatvolutpat.volutpat.

コードは次のとおりです ( jsFiddle )。

var sentence = 'Ut volutpat egestas volutpat.',
    word = 'volutpat',
    regex = new RegExp('[\s]?' + word + '[\s]?', 'g');

console.log(sentence.match(regex));

残念ながら、コンソールでは、上記のコードは 2 つの一致を返します。

[ "volutpat", "volutpat" ]

word = 'volutpat egestas'または、word = 'volutpat.'それらを一致させる必要がある場合は、機能する必要があることに注意してください。

4

4 に答える 4

6

正規表現を動的に作成する場合、バックスラッシュを再度エスケープする必要があることに注意する必要があります。

var sentence = 'Ut volutpat egestas volutpat.',
    word = 'volutpat',
    regex = new RegExp('[\\s]?' + word + '[\\s]?', 'g');

また、おそらく space-optionally ではなく、space-or-start-or-end をチェックしたいでしょう:

var sentence = 'Ut volutpat egestas volutpat.',
    word = 'volutpat',
    regex = new RegExp('(^|\\s)' + word + '(\\s|$)', 'g');

エスケープされないと仮定すると、それもエスケープすることwordを検討する必要があるかもしれません。

于 2013-06-22T01:13:58.330 に答える
1

エッジがスペース文字または行の開始/終了のいずれかに一致するようにします。そう:

(\s|^)(volutpat)(\s|$)

これは、検索語自体にドットが含まれている場合でも機能するはずです。これが実際の動作です。

于 2013-06-22T01:15:20.867 に答える
1

これは、スペースをオプションとして指定したためです。したがって、スペース以外の境界または境界のないエンティティにも一致します。

指定した文では、単語が 2 回表示されます。1 回目はスペースと一致し、2 回目は単語自体に一致します (周囲にスペースはありません)。

于 2013-06-22T01:26:35.297 に答える
0

入力した特殊文字はword、バックスラッシュでエスケープしない限り、そのように扱われます\。一致する単語が 2 つあるため、提供した例は 2 回一致します。

于 2013-06-22T01:14:02.007 に答える