• ベストアンサー

JavaScriptの正規表現について

変数に格納された文字列から任意の文字ついて<strong>タグを付けて置き換える方法 が分からなくて困っています 具体的に言うと 文字列stに対して変数keyに格納された文字列にマッチした全て強調する方法... ex) st="4月の16日の昼の弁当のおかず" key="の" の結果が st="4月<strong>の</strong>16日<strong>の</strong>昼の弁当<strong>の</strong>おかず" となるスクリプトを作成したいのです。 どなたかよろしくお願い致します。

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

  • ベストアンサー
noname#199778
noname#199778
回答No.1

正規表現オブジェクトと.replace()メソッドを利用すればよいと思います。 質問文の例を元に、実例を挙げます。 <script type="text/javascript"><!-- st="4月の16日の昼の弁当のおかず"; key="の"; regexp= new RegExp(key,"g"); st=st.replace(regexp,"<strong>"+key+"</"+"strong>"); //--> </script> 簡単に解説すると、3行目でregexpという名前の正規表現オブジェクトを作成しています。 ここでは、検索対象文字列を変数keyに格納されている値とし、gオプションでマッチするすべての部分を対象にするようにしています。 その次の行で、変数stの中にある変数keyと一致する部分を正規表現オブジェクトを利用して探し出し、その部分をstrong要素で囲った表記に置き換えています。 RegExp()では、第1引数が検索対象文字列、第2引数が検索時のオプションになります。 .replace()メソッドでは、第1引数が検索対象文字列(正規表現も利用可)、第2引数が検索対象文字列の置換後の文字列になります。 一応、IE6、Netscape 7、Opera 6.05で動作確認してあります。 参考になれば幸いです。

yambal-net
質問者

お礼

ありがとうございます お礼が遅れましたが、 早いお返事を頂き、とても助かりました。 今後もよろしくお願い致します

その他の回答 (3)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.4

>正規表現は奥がふかいですなぁ... ANo.#2の補足をください。(・;)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.3

となると <HTML> <HEAD> <TITLE>(/_ _ )/♪へ(-。-へ)♪(/_ _ )/ウ</TITLE> </HEAD> <BODY> <P><INPUT id=text1 name=text1 style="WIDTH: 257px; HEIGHT: 22px" size=33 value=4月の16日の昼の弁当のおかず></P> <P><INPUT id=text2 name=text2 value=の></P> <P>&nbsp;</P> <SCRIPT LANGUAGE=javascript> <!-- var key = text2.value; var r, ss; var st = text1.value; ss = st.split("の"); r=""; for(i=0;i<ss.length-1;i++){ if(ss[i]=="昼"){ r = r + ss[i] + key; }else{ r = r + ss[i] + "<strong>" + key + "</strong>"; } } r = r + ss[i] window.document.write(r); //--> </SCRIPT> </BODY> </HTML> こんな感じはどうでしょうか?

yambal-net
質問者

お礼

ありがとうございます 正規表現は奥がふかいですなぁ...

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.2

昼の弁当  ↑ これは強調させないんですね?

関連するQ&A

  • PHP、正規表現の使い方

    PHPで特定の文字列から特定の文字までを削除したいのですが、 正規表現を使うということはわかりましたが、どのようにしていいかがいまいちわかりません。 http://www.sample.php?a=test&b=ex&c=sample という文字列があったとして、 &b=exを取り除きたい場合はどのようにしたらいいのでしょうか。 mb_ereg_matchを使用しようと思っていますが、 その他の方法があればそちらも教えてください。

    • ベストアンサー
    • PHP
  • javascriptの正規表現で重複して検索

    javascriptの検索において、検索パターンを正規表現で指定し、gオプションで全検索とした場合です。 1度目にマッチした文字列のうち一部が、後に続く別の文字列と組み合わさると、新たに検索パターンとマッチする場合、これについてもマッチさせる方法はないでしょうか。 var x = 'ペンギン3年4月5日'.match(/\D\d[年月日]/g); document.write( x ); これを実行すると、 「ン3年」 しか表示されませんが、 「ン3年」「年4月」「月5日」 の3つとも表示させるようにしたいのです。

  • split() 正規表現

    正規表現で / (スラッシュ) .(ドット)にマッチ 正規表現により文字列を分割し、配列に格納する split("[/\.]" $v)としていましたが split関数が使えなくなるので、変わりの方法を考えていますが preg_split()などではうまくいきませんでした。 何か方法を教えて下さい。

    • ベストアンサー
    • PHP
  • 正規表現 TCL regexp関数

    regexp関数を用いて正規表現で文字列を操作したいですが、 上手く正規表現でかけなくて困っております。 変数=第一文字列,第二文字列,第三文字列,第四文字列,第五文字列 regexp --{,,,,$} 変数 match A B C D E と実現し、区切った文字をそれぞれA-Eの変数へ代入。 【操作文字列】 ・CSV形式の”,”カンマ4つで5区分に切ります ・第一文字列は先頭の文字は空白以外の[A-Za-z0-9_]途中空白有(\s) ・第二文字列は空(,,) ・第三文字列は数字 ・第四文字列は文字のみ空白なし数字なし ・第五文字列は数字文字混在 このように実現したいのですが、正規表現を見ながら regexp --{\c\w,^\c,\d+,\w+,\c+$} 変数 match A B C D E のようにやったのですが、無理でした

  • 正規表現で括弧にマッチさせたいのですが・

    Javaで正規表現を使おうとしてるのですがうまく行きません。 次のようにマッチさせたいです。 マッチさせたい文字列 : (abc)and(efg) マッチする文字列 : abcとefg マッチさせたい文字列 : (abc(efg)) マッチする文字列 : abc(efg) もしくは abc(efg)とefg とのようにまっちさせたいです。上の方はできたのですが、下の方がabc(efgとマッチしてまうのです。 いい方法を教えてください><お願いします。

  • PHPの正規表現による文字列置換について

    下記のような文字列から「abcde」のみを変数に格納したいのですが、正規表現に苦戦しています。 http://example.com/detail.php?p=abcde.php 取得したい「abcde」のみが毎回変わり、その前後は固定です。 preg_replace()を使うのがいいのだろうなと思い、いろいろやってみているのですが、 なかなかマッチさせることができません。 どうかご教示頂けますでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現が得意なかた教えてください

    以下のような文字列から <honyarara><tekuteku>2バイト文字列</tekuteku></honyarara> の <tekuteku>2バイト文字列</tekuteku> この部分にマッチさせたいのですが ちなみに直近にあるtekutekuタグはタグの名称は色々なので、tekutekuという文字を使ってマッチはできません。 要は2バイト文字列をはさんだ直近のタグまでをマッチさせたいのです。 2バイト文字列は [^\x01-\x7E] によって得られることはわかったのですが、 それを挟んだタグまでをマッチさせる方法をお教え下さい。

  • 正規表現のパターンに変数を指定したい

    perlでパターンマッチを行う際、正規表現で行いますが、パターン文字列内に変数を指定したい場合はどうすればよいのでしょうか? if ($ENV{HTTP_USER_AGENT} =~ /$pattern/) {  : } というようなことをしたいのですが、うまくいきません。 方法はありますでしょうか?

    • ベストアンサー
    • Perl
  • メルアドをチェックする正規表現?

    こんにちは,よろしくお願いします。JavaScriptでメルアドをチェックしようと次のような文字列を,patternという変数に代入して, var pattern = "^[a-z0-9\-_.]+@[a-z\-]+(\.[a-z\-]+)*com|net|org|edu|gov|mil|int|info|biz|name|pro|museum|aero|coop|[a-z][a-z]$"; 次のようにチェックしたのですが, if(mail.match(pattern)){・・・ "aa"など,2つ以上の小文字のアルファベット文字列にマッチしてしまいます。つまり,@が入っていなくてもマッチしてしまいます。実は,正規表現の解説書を見てこのような文字列としたのですが,JavaScriptでは不都合な点があるのでしょうか?ご存知の方がいらっしゃいましたら,ご教授ください。よろしくお願いします。

  • 正規表現内に変数を使用する方法

    match() や replace() の第1引数に文字列ではなく正規表現を使用 できますがこの正規表現内に変数を使用する場合、どうやったらよいの でしょうか。 var str = 'てすと'; alert(str.replace(/str/, 'テスト')); とすることができません。 (Perlではパターン内に変数が使用できるのですがJSでは変数が使用 できません) http://ar.aichi-u.ac.jp/blog/js-replace.html に書いてあるように第1引数に文字列を渡すと正規表現ではなくただの 文字とのマッチになってしまうようなので(確認済み)使えません。 面倒ですがリンク先にあるようにnew RegExpでRegExpオブジェクトを 作ってやる方法しかないんでしょうか。