- ベストアンサー
正規表現で/*~~*/を抜く
こんにちは。 正規表現で/*~~*/を抜くことに挑戦していますが、上手くいきません。 text = text.replace(/\/\*[^*/]*\*\//, ""); これだと、「[^*/]」は「*」か「/」以外の文字をあらわしてしまい、 /*aaa*aaa*/みたいなコメントは拾い上げてくれません。 なにか良い方法をご存知の方がいれば、ご教示願います。
- みんなの回答 (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
その他の回答 (1)
- heikuu2009
- ベストアンサー率33% (5/15)
多分これで大丈夫です。 text = text.replace(/\/\*[\s\S]*?\*\//g,"");
お礼
回答、ありがとうございます。 調べてみたところ、数量指定のメタ文字のあとの?は最短マッチと出てきました。 初めて知り、勉強になりました。 あと、少し疑問ですが、[\s\S]は.と変わらないんじゃないでしょうか…?
お礼
否定先読みについてググってみました。 興味深い内容を知ることができました。 正規表現も奥が深いですね… 回答ありがとうございました。