JavaScriptで単語を正規表現と照合しています。次の式では、空白を使用して潜在的な一致を区切ります。
/(\W)(foo)(\W)/g
これはほとんどの場合機能しますが、1 つのスペースで区切られた 2 つの一致がある場合は失敗します。\W
(例: "foo foo") これは、それらを区切るスペースが、最初の一致の最後と 2 番目の最初の一致であるためだと思います。
このエッジケースで機能するようにこの式を変更する方法はありますか?
JavaScriptで単語を正規表現と照合しています。次の式では、空白を使用して潜在的な一致を区切ります。
/(\W)(foo)(\W)/g
これはほとんどの場合機能しますが、1 つのスペースで区切られた 2 つの一致がある場合は失敗します。\W
(例: "foo foo") これは、それらを区切るスペースが、最初の一致の最後と 2 番目の最初の一致であるためだと思います。
このエッジケースで機能するようにこの式を変更する方法はありますか?
\b
の代わりに使用できます\W
。これは、ゼロ幅の単語境界(a\w
と a\W
または文字列の開始/終了の間の境界) に\W
一致し、文字列の開始または終了に存在しない可能性のある文字に一致します。
Javascript 正規表現には先読みがあるため、おそらく次のようなことができます。
/(\W)(foo)(?=\W)/g
後読みは利用できないと思いますが、同じ効果を持つ他の手法があります。
もちろん、これは先読みがキャプチャしないという点で機能的に異なるため、問題の性質によって異なります。ここでの要点は、キャプチャしないことではなく、一致しないことです。これにより、問題を回避できます。
これを試してみてください。うまくいくと思います:
/(\W)(foo| )(\W)/g
これにより、正規表現が 2 つの の間で一致するように指示さfoo
れwhitespace
ます\W
。