2

比較的単純な正規表現の問題があります。単語全体またはプレフィックスである場合、文字列内の特定の単語を一致させる必要があります。単語境界を使用すると、次のようになります。

\b(word1|word2|prefix1|prefix2)

ただし、一部の単語は奇数文字で始まる場合があるため、単語境界条件は使用できません (.999 など)。

私の解決策は、これらの奇妙なケースの空白または開始トークンを探すことでした。

(\b|^|\s)(word1|word2|prefix1|prefix2)

.999 のような単語は引き続き正しく一致しますが、一致した単語/接頭辞の前にある空白もキャプチャします。私の目的では、空白をキャプチャすることはできません。

肯定的な後読みはこれを解決するように見えますが、javascript はそれらをサポートしていません。この問題を解決するために同じ動作を得ることができる他の方法はありますか?

4

2 に答える 2

5

次を使用して、非キャプチャ グループを使用できます(?:)

/(?:\b|^|\s)(word1|word2|prefix1|prefix2)/

アップデート:

あなたがそれを置き換えたいものに基づいて(そして@AlanMooreの についての良い点\b)、おそらくこれで行きたい:

var regex = /(^|\s)(word1|word2|prefix1|prefix2)/g;
myString.replace(regex,"$1<span>$2</span>");

最初のグループはマッチの一部になるため、キャプチャ グループに戻しましたが、置換文字列に保持したいことに注意してください (そうですか?)。また、修飾子を追加してg、これが文字列内のすべての出現に対して発生するようにします (それが必要であると仮定します)。

于 2013-08-10T01:01:10.037 に答える