Java Scriptでreplaceを使った文字列の変換方法

このQ&Aのポイント
  • java scriptのreplaceメソッドを使って文字列の変換を行いたい場合、正規表現を用いて指定の文字を置き換えることができます。
  • 例えば、「d(e)-4-yl」という文字列を「d-4-yl」と変換する場合、replaceメソッドと正規表現を組み合わせて、「(e)」を空文字に置き換えれば良いです。
  • ただし、変換対象の文字が「(e)」のみでなく、さまざまな数字とアルファベットの組み合わせがある場合も考慮する必要があります。
回答を見る
  • ベストアンサー

【Java script】replaceの正規表現

java scriptでreplaceを使って文字列の変換を行うことを考えています。 どのように書けばよいでしょうか、教えてください。 状況ですが、 文字列:「d(e)-4-yl」 を 文字列:「d-4-yl」 と変換します。 文字列は下記の通りです。   アルファベット (e) ハイフン 数字 ハイフン yl 例:   d   (e)  -    4   -   yl アルファベットと数字は様々な数字とアルファベットが入ります。 その他の例 「n(e)-2-yl」 → 「n-2-yl」 例えば下記は変換しません。 d(e)-4-wer、d(e)-4-cd、d(e) よろしくお願いします。

  • Java
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
回答No.3

> REPattern = /([a-zA-Z])\(e\)(-\d-yl)/g; > SRPattern = "$1$2"; 下記のサイトを参考に どのような意味なのか考えてみて下さい。 JavaScript/RegExp https://ja.wikibooks.org/wiki/JavaScript/RegExp 下記のサイトは「JavaScript」ではなく「Perl」なので違う部分もありますが、正規表現の参考になります。 Perl 5.8 《 正規表現 》 http://ashtarte.hotcom-web.com/utf8/smt.cgi?r+sara/&bid+0000003D&tsn+0000003D&

pikopiko29
質問者

お礼

返答が遅くなり申し訳ありません。 まず、出来ました。 また、正規表現を勉強できるサイトも教えていただきありがとうございます。 勉強していろいろなことに活用したいと思います。

その他の回答 (4)

回答No.5

> REPattern = /([a-zA-Z])\(e\)(-\d-yl)/g; ↑キャラクターセットがシフトJISの場合の¥(半角エンサイン)は、キャラクターセットがUnicode(ユニコード)の場合の\(半角バックスラッシュ)に見えますが、文字コードは同じでフォントが違うだけなので、普通にコピペするだけで おkです。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

すみません。 まだ、ルール(規則)がよく分かりません。 「・・・d(e)-4-yl・・・」とありますが、この「・・・」と「d(e)-4-yl」と「・・・」が、どのようにつながっているのですか? それが分からないと、if文での判断ができません。 なお、注意事項ですが、「JavaScript」は「Java Script」と分けてはいけません。 「JavaScript」とくっつけてください。 また、「Java」という別の言語もあるので、「Java」は勉強中といわれても、全く別の言語ですので、間違えないでください。 しかし、「Java」と「JavaScript」が全く関係のない、別の言語、というのは、私も最初、意味が分かりませんでしたが・・・

pikopiko29
質問者

お礼

回答ありがとうございます。 ・・・は英文字と「(」「)」「-」などの記号が続きます。 >「Java」と「JavaScript」が全く関係のない、別の言語。。。 そうなんですね。 勘違いしていました。 注意したいと思います。 ありがとうございました。

回答No.2

> 文字列は下記の通りです。 >   アルファベット (e) ハイフン 数字 ハイフン yl ↑この「アルファベット、数字」が1文字の場合のみ変換します。 複数文字の場合は変換しません。 <html> <head> <meta http-equiv="Content-Type" content="Text/HTML; charset=Shift_JIS"> <title>test</title> </head> <body bgcolor="#8f9fff" text="#000000" link="#2f2fff" vlink="#d700d7" alink="#00ffff" > --> <script type="text/javascript"> <!-- REPattern = /([a-zA-Z])\(e\)(-\d-yl)/g; SRPattern = "$1$2"; Str = "d(e)-4-yl"; Rep = Str.replace(REPattern,SRPattern); document.write(Rep+'<br><br>'); Str = "n(e)-2-yl"; Rep = Str.replace(REPattern,SRPattern); document.write(Rep+'<br><br>'); Str = "d(e)-4-yl n(e)-2-yl d(e)-4-wer d(e)-4-cd d(e)"; Rep = Str.replace(REPattern,SRPattern); document.write(Rep+'<br><br>'); --> </script> <br> </body> </html>

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

厳密なルール(規則)が、ご説明では判断できないのですが、最後の2文字が「yl」のものだけが、「(e)」(「e」は、他のアルファベットの可能性あり)を削除する、と考えてよいでしょうか。 もしそうなら、「最後の2文字が“yl”の場合」を「If」文で調べて、最初の1文字目を、例えば「a」に入れ、5文字目以降を「b」に入れ、「a」と「b」を結合する、という考え方で、問題ないのでしょうか? 私が言いたいのは、「正規表現」を使わなくても、もっと簡単にできるのではないでしょうか?

pikopiko29
質問者

補足

if文を使うことは考えていませんでした。 また、説明が不十分でした。 正しくは ・・・d(e)-4-yl・・・ であり、変換したい文字列は文字列の途中に複数回出てきます。 「e」は別のアルファベットの可能性がありません。 excel_VBAのif文は得意ですが、javaはまだまだ勉強中です。 お手数でなければ、if文を使った時はどのようになるか教えていただけないでしょうか。

関連するQ&A

  • 正規表現

    お世話になります。正規表現の質問です。 \w に当たる文字とハイフンに合致するが、少なくとも一文字はアルファベット(a-z)またはハイフン(-)が含まれていなければならない(つまり、数字だけの文字列は合致しない) という正規表現はどうあらわせばよいでしょうか。 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現について

    お世話になっております。 現在、JAVAで開発を行っていますが、わからないことがあります。 1-1-1-01,1-2-1-01,1-3-1-01といった様な、数字+"-"ハイフンの文字列8桁が入力されているのかどうかのチェック処理が上手くできません 。 if(Pattern.matches("\d{1}-\d{1}-\d{1}-d{2}")){ } 上記で記載して上手く動作しません。 どなたかご存知でしたら教えて頂けませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • replaceで正規表現を利用したい

    ・置換前文字列 … 9月15日(土)12時16分準備 ・置換後文字列 … 2012-09-15 12:16:00 ■質問1 ・(土)を削除する方法を教えてください ・time = time.replace(/(*)/,"");? ■質問2 ・0がついていなければ、先頭に0を付与する方法は? ■質問3 ・まとめてやる方法はあるでしょうか?  下記みたいにひとつひとつやる方法しか思いつかないのですが…  time = time.replace("準備","");  time = time.replace("月","-");  time = time.replace("日","半角空白");  time = time.replace("時",":");  time = time.replace("分",":00");

  • 正規表現を使っての文字列置換。

    ASP(VBScript)環境です。 長音符を半角ハイフンに置換したいのですが、うまくいかないので アドバイスいただけないでしょうか。 対象の文字列が住所を想定しているので、数字の間の長音符のみ ハイフンに置換したいと思っています。 例:ワンダービル1ー2ー3 → ワンダービル1-2-3 予め英数字は半角英数字にしてあります。 こんな感じで変換をしようとしてみましたが ----- '長音符の変換 Set ObjRegExp = Server.CreateObject("VBScript.RegExp") ObjRegExp.Pattern = "[0-9]ー[0-9]" StrHalf = ObjRegExp.Replace(StrHalf, "-") ----- これをかけてみると、「1ー1」が数字もろとも「-」になってしまいます。 問題点を教えていただけないでしょうか。

  • replaceでの正規表現の記載について教えて下さい。

    replaceでの正規表現の記載について教えて下さい。 replaceを用いてt2の文字列をclpreの文字を対応するclaftの文字に変更することを考え、下記のようにくんでみましたが、エラーが出てしまい上手く行きません。 正しくはどのように記載するのでしょうか? ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー var t2 = "KJANN B CVA"; clpre = new Array("A" , "B" , " ", " "); claft = new Array("@" , "*" , "s" , "S"); for (i=0; clpre[i]; i++){  t2 = t2.replace(/clpre[i]/g, claft[i]); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • 正規表現での置換えについて

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現 特定の文字列パターン以外を全部消したい

    テキストエディタで"a1"~"h8"まで64種類以外の文字列を一括削除したいと考えています。 消したい文字列は「半角アルファベットaからh、半角数字1~8で構成される2文字ずつの組み合わせ」以外の全ての文字です。改行も消したいです。 (例) たとえば以下のような文字列を、 9. e6 10. e7 11. d7 12. g6 13. g5 14. c5 15. -- 16. c6 以下のようにしたいのです。 e6e7d7g6g5c5c6 正規表現の初心者です。どうぞよろしくお願いします。

  • 正規表現の添削をお願いします

    アルファベットと数字とスペースと「-」のみで構成される任意の長さの文字列をjavaの正規表現であらわしたいです。 [\s0-9a-zA-Z-]+ でいいのでしょうか? 最後の「-」がまずいような気がするのですが、[-]はどこに持っていくのが正しいのでしょうか。 他にも間違っているところがありましたら、教えて下さい。

  • preg_replaceについての質問です

    掲示板用のスクリプトなんですが、 >>(数字) をURLに変換するのはどうすればいいのでしょう? $message = preg_replace("/>>(\d+)/","<a href=\"#$1\">&gt;&gt;$1</a>",$message);

    • ベストアンサー
    • PHP
  • PowerShellの replace演算子で

    PowerShellの replace演算子で、キャプチャーしたものと、変数をくっ付けた時、うまく表示できません。これはどうしたらよいのでしょう。 例 21AA-N1-M01.txt 21AB-N2-M02.txt などのファイルがあるとして、先頭から2文字と1番目のハイフンの隣の文字とNの隣の数字に1を加えたものと2番目のハイフン以降をくっ付ける。 21AA-N1-M01.txt → AAN2M01.txt dir *.txt | % {$a = [regex]::Matches($_.Name,'\d+') ; $b = 1 + $a.Value[1] ; $_.Name -replace '..(..)-N(\d)-(.*)',"`$1$b`$3"} $12M01.txt となってしまいます。 "`$1 $b`$3" という風に $1 と $b の間にスペースを入れるか、何か文字を入れると正常な表示にはなりますが、間に余計なものは入れたくないです。 $1 と $b の間に何かエスケープ文字とか入れるのでしょうか?

専門家に質問してみよう