0

HTMLコードでラップするユニコード文字がある場合でも、完全な単語またはフレーズに一致する正規表現パターンを作成したいと考えています。だから私はこのパターンを使用します:

var pattern=new RegExp('(^|\\s)'+phrase+'(?=\\s|$)', "gi");

1 つの問題を除いて、複数の単語のフレーズでも完全に機能します。フレーズが文字列の先頭でない場合、単語の前のスペースと一致します。そのため、ラップした後、そのスペースが失われます。スペースではなくフレーズ変数のみをラップしたい。

例えば:

var string="This is a nice sentence.";
var phrase="is a nice";
/*OUTPUT: Thisis a nicesentence*//*HTML OUTPUT: This<span>is a nice</span>sentence*/
/*What I want: This <span>is a nice</span> sentence*/

もちろん、このパターンは機能します。

var pattern=new RegExp(phrase, "gi");

しかし、別の部分文字列である文字列を探しているわけではありません。

より良い正規表現パターンで問題を解決することはできますか?

4

1 に答える 1

1

グループ 1 でキャプチャしたものを書き戻すだけです。

output = string.replace(pattern, '$1<span>' + phrase + '</span>');

replacebut matchor andを使用していない場合execでも、手動で置換を行う場合でも、返された配列のキャプチャ グループにアクセスして、. の前にスペースまたは空の文字列を挿入できますspan

ちなみに、フレーズもキャプチャする場合は、置換で文字列を連結する必要はありません。

var pattern = new RegExp('(^|\\s)('+phrase+')(?=\\s|$)', "gi");
output = string.replace(pattern, '$1<span>$2</span>');
于 2013-07-03T16:17:44.713 に答える