• ベストアンサー

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

こんにちは。 正規表現で/*~~*/を抜くことに挑戦していますが、上手くいきません。 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

  • 正規表現で置換

    正規表現の初心者です。 テキストエディタを使って、「@:」で始まる以外の行の先頭に「//」を挿入してコメントアウトしたいのですが、正規表現がうまく書けません。 検索対象: ^[^(@:)] 置換文字列: // でいいのかなと思ったのですが、[]の中ではグルーピング用の()も文字として認識されてしまうのですね。 どのように書いたら正しく置換されるでしょうか。 どうかご教示ください。

  • ruby 正規表現について教えてください。お願いします。

    スイマセン初心者で、正規表現についてほかのみなさんにとっては、簡単なんだと思いますけど、どうかご回答お願いします。 テキストファイルを読み込んで、ある文字列の、ある場所だけを、出したいです。 テキストは #AAA#(aab acb dde) #BBB#(001) #AAA#(bca kme lmg) #BBB#(002) #AAA#の()の中身は適当な文字列で、他の文字が入ると考えての場合です。 この場合で、 #AAA#の文字列の、#AAA#と()を除いた文字列つまりこの場合だと、 aab acb dde bca kme lmg を出したいんです。 簡単な問題なんだと思いますけど、どうか回答お願いします。

  • 正規表現

    正規表現を使って、数字、大文字小文字のアルファベット、「”」(ダブルコーテーション)、「、」コンマ以外の記号を、表せる正規表現方法はどうなるのでしょうか? 見当がつきません。 どなたかお願いします。

    • ベストアンサー
    • Java
  • 正規表現について教えてください。

    正規表現について教えてください。 JavaScriptでプログラミングを行っています。 その中で文字列に対しゼロサプレスを行いたいと思い 調べた結果、正規表現を使用する以下のコードで 実現可能なことが分かりました。 val.replace(/^0+([0-9]+.*)/, "$1") コードを記述し実行すると確かに可能なのですが 正規表現を調べてみても何故これでゼロサプレスが可能なのか よく理解できませんでした。 申し訳ありませんが初心者でも理解できるように説明して頂けないでしょうか。 宜しくお願いします。

  • 正規表現についてお教え下さい

    正規表現についてお教え下さい。 )以外の全ての文字列(改行・Tab・空白等含む)の1回以上の繰返しという記述は正規表現ではどのような記述になるでしょうか? NoEditorで下記のような条件でgrepしようとしたのですがうまくいきません。 [[^[^\)]] \t\n\r\f]+ 具体的には下記のような5行があった場合、以下のような条件で1、2、3行目を抽出できるということを想定しています。 条件:AAA )以外の全ての文字列の1回以上の繰返し \) ※現状の条件の記述はAAA[[^[^\)]] \t\n\r\f]+\) 1行目 AAAあ(aaa) 2行目 AAA あ(aaa) 3行目 AAA あ 4行目 (aaa) 5行目 AAA)

  • 正規表現について

    正規表現について質問をさせていただきます。 VB6.0にて正規表現を使用し、入力された文字のチェックを行っていますが どうしてもうまくいきません。 チェックしたい文字は A(半角アルファベット大文字1文字)または AAA(半角アルファベット大文字3文字)または (AAA)(半角カッコつき半角アルファベット大文字3文字)で 上記3パターン以外はエラーとしたいと思っています。 パターンは下記のように作成したのですが "(^[\(][A-Z]{3}[\)])|(^[A-Z]{1,3})" A、AAA、(AAA)以外でもA(AA)やAAAA等も正常ケースとして通過してしまいます。 パターンをどのように作成すればよいか教えて下さい。 よろしくお願いします。

  • VBAの正規表現

    VBAで正規表現による置換をしたいです。 以下のような行が複数あります。 1 aaa bbb ccc ddd 2 aaa bbb ccc ddd 3 aaa bbb ccce ddd 4 aaa bbb eccc ddd ccc の部分のみ置換したいです。 dim hensuu as string dim replace as string replace = eee hensuu = ccc (省略) strPattern = "(\s*)" & hensuu & "(\s+)" rep = RegExpObj.Replace(buf, "\1" & replace & "\2") 行数1,2 のみを置換したのですが、4も置換されてしまいます。 (\s*) の "*" が良くないのは理解していますが、"+" にしてもうまくいきません。 どなたかどのようにしたら1,2のみ置換できるようになるかをご教授お願いできませんでしょうか よろしくお願いいたします。

  • 正規表現について

    正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現で「除く」

    windows用のエディタの「VIVI」というのを使っています。 grepで「2002/09/01」という文字列を含まないテキストを検索したいのですが、正規表現での検索の方法を教えていただけないでしょうか。 #どのエディタも同じではないかもしれませんが。 #自分は、正規表現のことは素人です。単に上記条件の日付のみを変更して使いたいだけ・・ (^^;

  • 正規表現について

    今lexのプログラムを書いているのですが、正規表現の部分でつまずいてしまいました。perlの正規表現なら分かるのですが、lexと少しかってが違い困っています。lexの正規表現でコメント(プログラム中で/**/で囲まれた部分)を読み飛ばす時には、どのような正規表現にしたら是非教えてください。なお/**/の中には文字列*/は出てこないと過程していいとのことでした。 解答お願い致します。