1

以下の 2 つの正規表現を組み合わせる方法があるかどうか、または別の方法で 2 つのタスクを組み合わせる方法があるかどうかを知りたいです。

1) /(<\/[a-z]>|<[a-z]*>)/g
2) /\s{2,}/g

具体的には、これを置き換えるために使用されます。

This is <b>a test</b> and this <i> is also a test</i>

これに:

This is <b> a test </b> and this <i> is also a test </i>

最初の正規表現は、すべての開始タグと終了タグの前後にスペースを追加するために使用され、2 番目の正規表現は、削除される 2 つ以上のスペース文字のすべての発生に一致するために使用されます。

ここにコードがあります

var inputString = 'This is <b>a test</b> and this <i> is also a test</i>',
    spacedTags = inputString.replace(/(<\/[a-z]>|<[a-z]*>)/g, ' $1 '),
    sanitizedSting = spacedTags.replace(/\s{2,}/g, ' ')

console.log(sanitizedSting);

jsfiddle

おそらくさらに高速になるDOM操作を使用してそれらを実行できることはわかっていますが、これを回避しようとしています。

ありがとうございました

4

2 に答える 2

3

末尾と先行のスペースを探す場合は、内側のキャプチャ グループを置換値として使用すると、同様のことが実現できます。

var inputString = 'This is <b>a test</b> and this <i> is also a test</i>',
    spacedTags = inputString.replace(/(\s*(<\/[a-z]>|<[a-z]*>)\s*)/g, ' $2 '); 

console.log(spacedTags);

JSフィドル

これは、必要に応じて空白で囲まれた開始タグまたは終了タグに一致するものを探します。次に、どちらかの側に追加されたスペースを使用して、内側の一致を置換として使用します。

ただし、どちらの実装でも、終了タグの後に常に末尾のスペースが残ります。"</i> "

これによるパフォーマンスの変化については調べていませんが、1 つの正規表現の問題に対処しようとしています。

于 2013-07-28T01:02:12.023 に答える