0

テスト文字列は次のとおりです。

hello hello hello

<span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think.

私は次のように出てきたいです:

hello hello hello

@Tom I don't know @Tom I don't think.

私はこの正規表現を使用します:

comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/span\>/gi,"@$1");

しかし、それは出力します:

hello hello hello

@Tom</span> I don't know <span class="self-reference">Tom I don't think.

期待どおりに動作するようにこれを変更する方法を誰か教えてもらえますか?

4

2 に答える 2

3

非貪欲な正規表現マッチングを使用します。

comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");

I addedがなければ、?正規表現 (.*) は、文字列内で見つかった最後まで文字列全体と一致</span>します。非貪欲な演算子*?を使用すると、一致が見つかるとすぐに一致が停止します。

遅延定量化

正規表現の標準量指定子は貪欲です。つまり、可能な限り一致します。

ソース

于 2012-09-12T14:00:10.487 に答える
2

別の可能な解決策:

comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1");

([^<]+)<が見つかるまですべての文字をキャプチャします

于 2012-09-12T14:02:41.180 に答える