【javascript】正規表現についてHTML/CSS/JavaScriptを扱っている方の為のコミュニティです。色んな疑問や質問を皆で解決していきましょう!※最初はjQuery限定のコミュでしたが、jQueryはJavaScriptのライブラリであり、また、HTML/CSSも深く関わってくるので全部一つのコミュにまとめました。フォーラム(掲示板)ルール一般常識さえ守れば、どんなスレでも立てていただいて構いません。常識外れの投稿やスレを見つけた場合は、私の判断で削除いたします。「スレ立てるまでもない質問」のスレッドに投稿して下さい。9年前お世話になります。本当に何度も申し訳ないのですが、ある文字列を正規表現で表現できずに困っています。対象の文字列は↓のようなものです。【大量の文字】と言う部分に、大量の文字列があり、その後に</div><br>という文字列があって、おわるという文字列です。class='readspace'>~</div><br>までの文字列を取得したいのです。私が考えたのが↓なのですが、これだとnullが帰ってきてしまいます。class=\'readspace\'>.+<\/div><br>$/));どこが間違っているのか、ご教示願います。javascriptでの正規表現ですので、間違えないでください。正規表現は慣れてないので根本的に間違っていたらすいません。閉じ括弧が一つ多い気がします。class='readspace'>【大量文字】</div><br>"となりました。追記:ご存じかとは思われますが、「*」は0回以上一致を示します。閉じ括弧が一つ多い気がします。class='readspace'>【大量文字】</div><br>"となりました。追記:ご存じかとは思われますが、「*」は0回以上一致を示します。kimuchiさん、ありがとうございます。括弧が一つ多かったのは、alert関数でついでにメッセージを出していたんですが、そのときの括弧を消しわすれていただけですので、それが原因ではありませんでした。試行錯誤してたんですが、大量の文字列があるなかに一部、改行が混ざっていたようです。「.」ドットは改行コード以外の文字を表すので、改行が有る場合はうまくひっかからなかったようです。今度はちょっと実際の文章を貼った方が良さそうですね。今度からはもうちょっとわかりやすいように質問させていただきます。9年前サウスさんに最高のアドバイスを思ったので記録しておく。[\s\S]*で改行文字も任意の文字もすべて表すことができる。貴重な情報をありがとうございます。具体的に改行文字を含まないということを理解でき、とても助かりました。9年前kimuchiさん。いえいえ、こちらこそいつも助かっています。さっき貼り付けた[\s\S]*ですが、逆に改行文字が含まれていない場合は任意の文字が任意の数だけある条件にはマッチしないようです。私の勘違いでなければですが(笑)その場合は普通にドットを使って、.*だけで表現できました。改行文字を含まなければ、.*を使うようにすればよいとおもいます。9年前>>[\s\S]*「[]」内の文字「\s,\S」のいずれかが0回以上一致(論理和)なので、改行有り無し、文字の有り無しにかかわらず、改行文字も任意の文字もすべて表すことができると思います。検証もしてみたところ、どの場合でもうまくいきました。(環境の違いでしょうか?)それよりも気になることがあるのですが、スレの始めに書かれている「対象の文字列」はどのように取得しているのでしょうか?検証用の改行を含む文字の取得をdocument.getElementById(*).innerHTMLで行ったのですが、タグが中に含まれると、タグのシングルクォーテーションがダブルになったり、小文字が大文字になったりします。class=readspace>[\s\S]*<\/div><br>/i);のようにコードを変更して実行しました。>>[\s\S]*「[]」内の文字「\s,\S」のいずれかが0回以上一致(論理和)なので、改行有り無し、文字の有り無しにかかわらず、改行文字も任意の文字もすべて表すことができると思います。検証もしてみたところ、どの場合でもうまくいきました。(環境の違いでしょうか?)それよりも気になることがあるのですが、スレの始めに書かれている「対象の文字列」はどのように取得しているのでしょうか?検証用の改行を含む文字の取得をdocument.getElementById(*).innerHTMLで行ったのですが、タグが中に含まれると、タグのシングルクォーテーションがダブルになったり、小文字が大文字になったりします。class=readspace>[\s\S]*<\/div><br>/i);のようにコードを変更して実行しました。以上のことについて何かご存知ありませんか?場合によってはこれが[\s\S]*の結果の違いの要因であるかもしれません(^^;)kimuchiさん、何か色々すいません^^;対象の文字列はXMLHttpRequestを使って、PHP側から受信したデータをそのまま、match関数にかけてます。class='updatetime'>$time</div></div>";のように文字列を作って、echo関数を使いJS側でその文字列を受け取るようにしています。JS側では、XMLHttpRequestオブジェクトがhttpという変数だとすると、http.responseTextプロパティへアクセスし、http.responseText.match(正規表現)みたいな感じでチェックしています。それと、私は大文字小文字を区別したいので、iオプションは使っていません。この方法で改行コードが含まれていない文字列のチェックを[\s\S]+で行った場合に、何故かマッチしませんでした。変わりに.+で行うとマッチしました。その文字列はすぐ用意できないので、時間があった時にでもまた貼りますwちなみに、ただ単に改行のない文字列を作って、マッチングした場合には[\s\S]+でもマッチしました。class='readspace'>(.|\n)+<\/div><br>$/));</script>対象の文字列の中にカンマなんて存在してないのに、くっついてくるのでなんかのバグなんでしょうかねぇwkimuchiさんの不具合もその一種なのかもしれませんが、ちょっと私には原因は分からないです。