3

私は実用的な正規表現を作成しましたが、それは最良のユースケースではないと思います:

el = '<div style="color:red">123</div>';
el.replace(/(<div.*>)(\d+)(<\/div>)/g, '$1<b>$2</b>$3');
// expecting result: <div style="color:red"><b>123</b></div>

グーグルした後(?: ... )、正規表現で-グループの一致を無視することを意味することがわかりました。

el.replace(/(?:<div.*>)(\d+)(?:<\/div>)/g, '<b>$1</b>');
// returns <b>123</b>

しかし、私は最初の例から期待する結果が必要です。

'それらを除外する方法はありますか?書くだけreplace(/.../, '<b>$1</b>')

これは、正規表現でグループを除外する方法を理解するためのほんの少しのケースです。そして、私は知っています、正規表現でHTMLを解析できないもの:)

4

2 に答える 2

3

だからあなたは交換だけを使用しながら同じ結果を得たい<b>$1</b>ですか?

あなたの場合はちょうどreplace(/\d+/, '<b>$&</b>')十分でしょう。

ただし、数値の前後にdivタグがあることを確認したい場合は\K、次の式でルックアラウンドなどを使用できます。JSが後読みもサポートしていないことを除いて\K、運が悪い場合は、JSでそのためのキャプチャグループを使用する必要があります。

<div[^>]*>\K\d+(?=</div>)
于 2012-04-01T10:06:31.233 に答える
0

の置換値に問題はありません'$1<b>$2</b>$3'。私はあなたの正規表現をこれに変更します:

el = '<div style="color:red">123</div>';
el.replace(/(<div[^>]*>)(\d+)(<\/div>)/g, '$1<b>$2</b>$3');

最初のdivとの一致方法を変更すると、divタグの完全一致が維持されますが>、最初のdivタグを閉じる前に、可能な最大値ではなく、可能な最小値と一致するようにしてください。

正規表現を使用すると、次の入力文字列では必要なものが得られません。

el = '<div style="color:red">123</div><div style="color:red">456</div>';

次のようなものを使用する場合の問題:

el.replace(/\d+/, '<b>$&</b>')

これは、次のようなものでは正しく機能しません。

el = '<div style="margin-left: 10px">123</div>'

divタグ内の数字を取得するためです。

于 2012-04-01T10:23:39.030 に答える