0

私は正規表現と、この正規表現に一致する文字列をいくつか持っています。私の正規表現は、このすべての一致を 1 つの大きな一致として処理します (もちろん、そのような動作は望ましくありません)。例を示します。

私のテスト文字列(走り書きで申し訳ありませんが、これは問題ではありません):

sdfsd -dsf- sdfsdfssdfsfdsfsd -sdfsdf- 

jsコードでの私の正規表現:

view.replace(/(\-(.+)\-)/g, '<span style="background-color:yellow">$1</span>');

私の結果:

sdfsd<span style="background-color:yellow">-dsf- sdfsdfssdfsfdsfsd -sdfsdf-</span>

ご覧のとおり、"-" 内の各文字列はスパンで囲む必要がありますが、スパンは 1 つしかありません。どうすればこれを修正できますか? (正直なところ、(.+)正規表現部分を変更したくありません。これは問題になると思いますが、これを行う方法が他にない場合はお知らせください)。

つまり、結果は次のようになります。

sdfsd<span style="background-color:yellow">-dsf-</span> sdfsdfssdfsfdsfsd <span style="background-color:yellow">-sdfsdf-</span>

コメントでお気軽にお尋ねください。ご協力いただきありがとうございます。

4

2 に答える 2

2

正直なところ、(.+) 正規表現の部分を変更したくありません。これは問題になる可能性があると思います

なぜでしょうか、それは実際には問題の原因です。次の正規表現を試すことができます。

/(\-([^-]+)\-)/g

ダッシュが と-の間に表示される可能性が-あると思われる場合-は、効率の悪いものを使用できます。

/(\-(.+?)\-)/g

+?遅延一致を引き起こします。つまり、最初の と一致した後、単一の文字に一致し-、次にダッシュに一致するように制御を移動し、入力から別の文字を読み取る(消費する)ことができない場合は、次のようにします。以下が一致するまでオン。.+?-.+?-

于 2013-09-29T13:42:25.460 に答える
1

あなたが試すことができます:

view.replace(/-([^-]+)-/g, '<span style="background-color:yellow">$1</span>');
于 2013-09-29T13:40:02.567 に答える