• ベストアンサー

js 正規表現 3つ以上の場合にマッチさせたい

<br>の3つの連続のみにマッチさせたいのではなく、<br>の前後に空白があってもなくても「空白*<br>空白*」が3つ以上続けばマッチさせたいのですが、以下でマッチしない理由がよくわかりません。 空白空白空白<br>空白空白<br>空白<br>空白空白<br>.replace(/(.*<br>.*)\1{3, }/g, ''") ご存知でしたらよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1341/1821)
回答No.1

とりあえず… var my_str = ' <br> <br> <br> <br>', my_exp1 = /(?:\s*<br>\s*){3,}/gi, my_exp2 = /(?:[\u{20}\u{3000}]*<br>[\u{20}\u{3000}]*){3,}/giu; var re = my_str.replace( my_exp1, '' ); alert( re ); ~こんな感じで「前後に空白を含む<br>が3つ以上の文字列」にマッチします。マッチングパターンの1と2のどちらを使うかは入力される文字列の文字コードによって変化します。 「¥s」は「空白文字全般」に全てマッチングします。いわゆる半角空白や全角空白の他に「改行文字」や「タブ」等にもマッチングします。純粋に半角全角空白のみにマッチさせたい場合は、パターン2の方を使ってください。 ただしパターン2を使う場合は末尾の u が必須となります。これは入力された文字列を「文字コード:UTF8」として解釈し処理するためのオプションです。ですので Shif_JIS などで入力すると予期せぬ不具合が発生する可能性があります。

natyo4235
質問者

お礼

ありがとうございました。見当がつかなかったので助かりました。

関連するQ&A