• ベストアンサー

正規表現で/*~~*/を抜く

こんにちは。 正規表現で/*~~*/を抜くことに挑戦していますが、上手くいきません。 text = text.replace(/\/\*[^*/]*\*\//, ""); これだと、「[^*/]」は「*」か「/」以外の文字をあらわしてしまい、 /*aaa*aaa*/みたいなコメントは拾い上げてくれません。 なにか良い方法をご存知の方がいれば、ご教示願います。

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

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.2

> これだと、「[^*/]」は「*」か「/」以外の文字をあらわしてしまい、 "*/" を否定するには「否定先読み」を使います。 下記コードで期待通りに動作することを確認しました。 ----- var text = 'start /*aaa*aaa*/ end'; var pattern = '\\/\\*(?:(?!\\*\\/).)*\\*\\/'; text = text.replace(new RegExp(pattern), ''); // console.info('"'+text+'"'); alert('"'+text+'"'); ----- Google検索: 正規表現 否定先読み http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+%E5%90%A6%E5%AE%9A%E5%85%88%E8%AA%AD%E3%81%BF&lr=lang_ja&ie=utf-8

kura07
質問者

お礼

否定先読みについてググってみました。 興味深い内容を知ることができました。 正規表現も奥が深いですね… 回答ありがとうございました。

その他の回答 (1)

回答No.1

多分これで大丈夫です。 text = text.replace(/\/\*[\s\S]*?\*\//g,"");

kura07
質問者

お礼

回答、ありがとうございます。 調べてみたところ、数量指定のメタ文字のあとの?は最短マッチと出てきました。 初めて知り、勉強になりました。 あと、少し疑問ですが、[\s\S]は.と変わらないんじゃないでしょうか…?

関連するQ&A