[JS] 複数の単語を一発置換したい

このQ&Aのポイント
  • 複数の単語を一括で鍵括弧つきに置換したい
  • 指定された置換文字の指定順に置換を行い、重複置換はしない
  • 既存のコードではうまく動作しないため、解決方法を教えてほしい
回答を見る
  • ベストアンサー

[JS] 複数の単語を一発置換したい

例えば、keyword, word, desu などの複数の単語を [keyword], [word], [desu] のように鍵括弧つきに置換することを考えます。 以下のような文章があった場合、 koreha keyword ya word wo tikan suru situmon desu. 次のように置換したいです。 koreha [keyword] ya [word] wo tikan suru situmon [desu]. keywordはwordを包含しているので、この場合は先に指定されたキーワードを置換対象とし、 重複置換はしません。[key[word]]のようにはしたくありません。 ですので、上記の文章で、置換文字の指定順が word, keyword, desu の場合には、 koreha key[word] ya [word] wo tikan suru situmon [desu]. となればOKです。 これを実現したく、以下のようにしてみましたがうまくいきません。 var text = "koreha keyword ya word wo tikan suru situmon desu."; var keyRegExp = new RegExp("(keyword|word|desu)", "g"); var result = text.replace(keyRegExp, "["+RegExp.$1+"]"); 解決方法がありましたら教えてください。

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

  • ベストアンサー
  • e_watt
  • ベストアンサー率71% (25/35)
回答No.1

var text = "koreha keyword ya word wo tikan suru situmon desu."; var result = text.replace(/(keyword|word|desu)/g, "[$1]"); //alert(result); で十分かと思いますがいかがでしょうか。

その他の回答 (1)

回答No.2

置換関数で置換対象にそれより優先して 置換されるべき語句が含まれるなら そこを置換して返すようにする var text = "koreha keyword ya word wo tikan suru situmon desu."; var tgtStrs=['word','keyword','desu'] var keyRegExp = new RegExp("("+tgtStrs.join('|')+")", "g"); var result = text.replace(keyRegExp, repfnc); alert(result) function repfnc(str,ind,allStr){ var rtn="["+str+"]" for(var i=0;i<tgtStrs.indexOf(str);i++){ if(str.search(tgtStrs[i])!=-1){ rtn=str.replace(tgtStrs[i],"["+tgtStrs[i]+"]") break; } } return rtn }

関連するQ&A

  • ワードファイルの一括置換

    キーワード(80種類程)が含まれたワードファイル(10ページ程度)と、 キーワード(1行目)とそれに対応した文字列(2行目以降)が書かれたエクセルファイル(400行程)があります。 たとえば10行目が指定された場合、10行目に書かれた文字列に置換したワードファイルを簡単に作成できる方法ありませんか?

  • 文字列の置換

    文字列の置換 たとえば, if(abcd) という文字列があったときに,これを while(abcd){ に置換するにはどうすればいいでしょうか(同じような置換をしたいところが文章中にいくつもあるとします).つまり,文字列の一部をそのままにして置換するということです.いまの場合だと if( → while( はできたとしても, ) → ){ は,文章中に“)”がたくさんある場合は難しいですよね.wordなら,ワイルドカードを使って if(*) とすれば,検索はできるのですが,そのまま置換すると while(*){ となってしまい,*がそのまま残ってしまいます.どうにかできないでしょうか?

  • Javascriptで特殊文字を置換する方法

    表題の件で分からず教えてください。 PerlでHTMLとJavascript(HTML埋め込み)を作成しています。 Javascript(On Click)で、文字列を置換させたいのですが、うまくできません。 (最終的にやりたいことはTextAreaに埋め込んだタグ付き文章を「プレビューする」ようなイメージです) ■置換前の文字列 $body$ ■置換後の文字列 任意の文字列(タグを含む) ネットで調べたところ次の方法でできるようだったので試しましたが、できませんでした。 var rgexp = new RegExp("\$body\$", "g"); str = frm.preview.value.replace(rgexp, "■■■"); 「$」とエスケープ文字をはずすとうまくいくので、多分「$」で失敗しているのだと思いますが 解決が分かりません。 ※エスケープをはずすとPerlの出力時に怒られてしまいます お分かりになる方いらっしゃいましたらお願いします。

  • wordのワイルドカードを使用しての置換について

    word2007を使用しています。 置換を簡単に行うために、ワイルドカードを使用したいのですが、どのような指定をしたらよいでしょうか。お知恵をお貸しください。 やりたい内容は次のようなものです。 ・行頭から始まる「文字列1(文字列2)」のような形を見つけ、文字列1の前に★をつける。 (例)下記のような<文章1>を<文章2>のように置換する。 <文章1> あいうえお(かきくけこ) さしすせそ たちつてと あああ(いいい) ううううう えええ(おおお) <文章2> ★あいうえお(かきくけこ) さしすせそ たちつてと ★あああ(いいい) ううううう  えええ(おおお) よろしくお願いいたします。

  • 条件分岐で複数条件の指定を簡易的にしたい

    if ($key == 'keyword1' and $key == 'keyword2') この様な条件分岐をする場合に、keywordを足す度に and $key == 'keyword' と書いていかなければならないのが不便なので、これを $keywords = 'keyword1', 'keyword2'; などと一つの変数で指定してそれが反映される様にしたいのですが、こういった場合にはどうしたら良いのでしょうか。

    • ベストアンサー
    • PHP
  • WORDの置換で単語の後ろに空白文字を入れたい

    ワード2007です。 横書きで、各行に単語が1つか複数並んでいます。 下記のような場合に、単語の最後に空白文字を入れる(置換する)にはどうすればよいですか? 置換で、「単語の最後」「行の最後」を指定する方法がわかりません 1.AAA   AAA□   BBB ⇒BBB□   CCC   CCC□ 2.AAA AAA    AAA AAA□   BBB BBB ⇒ BBB BBB□   CCC CCC    CCC CCC□  よろしくお願いします。

  • エクセルとワードに別れた文章の表現を置換で変更する方法

    ISOの規定集作りはエクセルとワードに別れています。字句を変更するには、ワードの場合置換で行えることは知っていますが、エクセルの文章も同時に置換できるソフトはあるのでしょうか。

  • こんなソフトありませんか?文章中の複数のキーワードを一括して変換

    インターネットの文章を、MS wordにコピーし、それを省略形を使って文章を圧縮し、それをPalm Desktopのメモにコピペして、PDAのメモに入れていつも持ち運んでいます。 私が、インターネットからとる文章は全て英語、「省略形を使って文章を圧縮」とは、たとえば、andを&、diseaseをdz、treatmentをtxなどに置換することを意味します。さて、このような作業を、一語一語について行うのでなく、あらかじめ指定した複数のキーワードを一括して変換してくれるソフトはないでしょうか?

  • フォルダ内の複数のファイルで置換したい

    お世話になります。 現在、フォルダ内にWord及びExcelファイルがたくさんありまして、 その中の”2009-11-30”という語を”2009-12-22”に 一括で置換したいと思っています。 置換したい語は、Wordではヘッダに、Excelではフッタにあります。 ネットで検索したらスクリプトという物があることを知り、また、 以下のようなword用のスクリプトを見つけたので、 置換する用語の部分だけ変更したのですが、 ヘッダに書いてある文字は置換してくれませんでした。 (ヘッダ以外の文字で試したらOKでした) これは、アイコンをダブルクリックして 対象のファイルが入っているフォルダを指定するものらしいです。 ------------------------------- '#1 フォルダ全部のファイルでやる場合 '#2 指定したファイルだけやる場合 Const wdReplaceAll = 2 strDir = InputBox("ディレクトリ名を入力してください。") '#1 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") '#1 Set objFolder = objFSO.GetFolder(strDir) '#1 Set objWord = CreateObject("Word.Application") objWord.Visible = True For Each objFile In objFolder.Files '#1 If Lcase(Right(objFile.Name, 4)) = ".doc" Then '#1 strArg = objFile.Path '#1 '#2 For Each strArg In WScript.Arguments Set objDoc = objWord.Documents.Open(strArg) Set objSelection = objWord.Selection objSelection.Find.ClearFormatting objSelection.Find.Replacement.ClearFormatting With objSelection.Find .Text = "2009-11-30" .Replacement.Text = "2009-12-22" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll 'Replace:=wdReplaceAll objDoc.Save objWord.Documents.Close Set objDoc = Nothing Set objSelection = Nothing End if '#1 Next objWord.Quit -------------------------------------- これは、内容をどう変えたらヘッダやフッタ部分も 置換してくれるようになりますか? また、Excel用にするには、このスクリプト内の "Word"を"Excel"に変えるだけで良いのでしょうか? 参考までに、OSはXPです。 足りない情報等ございましたらご指摘願います。 どうぞよろしくお願いいたします。

  • MS-Wordで改行を検索・置換する方法

    MS-Wordで改行を検索・置換する方法をご存知の方があれば教えてください。 以前(2010年)のご回答に、 「検索と置換画面の「置換」タブ画面で [オプション] を選択し、右下にある「あいまい検索」のチェックを外します。 検索する文字列にカーソルを置いて、[特殊文字] ボタン → 段落記号(P) を選択すると、検索する文字列に 「^p」が入力されます。(直接キー入力してもOKです)」がありました。 しかし、私が使っている、Word 2010には「段落記号(P) 」がなく直接「^p」を指定してもエラーになり、代わりに改行らしい「任意指定の改行(O)」「任意指定の行区切り(L)」では、Word文書の改行マークにヒットしません。 よろしくお願いします。

専門家に質問してみよう