正規表現の記載方法と文字列の最後の指定した文字を削除する方法

このQ&Aのポイント
  • 正規表現の記載方法や文字列の最後の指定した文字を削除する方法について教えてください。
  • 質問者は、文字列の最後の「,」「.」を削除するためにプログラムを試しましたが、エラーが発生しました。正しい記述方法やスマートな方法を教えてください。
  • また、質問者は指定した文字を一つずつ書いて削除することはできたが、たくさんの文字をまとめて配列化したいと考えています。どのように記述すればよいでしょうか?
回答を見る
  • ベストアンサー

matchの中の正規表現の記載について教えて下さい。

matchの中の正規表現の記載について教えて下さい。 文字列の最後に「,」「.」があった時にこれを削除するために下記のようにプログラミングしてみました。 上手い方法を思いつかなかったので、最後に「,」があったときに「del」を文字列の最後に足して、replaceを用いて削除することをにしました。 削除したい文字を、一つずつ書いて削除させることは出来たのですが、まとめて配列化して下記のようにしてみたのですが、エラーが出てしまいました。また、削除したい文字はたくさんあるため、配列化もしくはそれに近いことが出来る必要があります。 正しくはどのように記載するのでしょうか? また、文字列最後の指定した文字だけを削除するもっとスマートな方法がありましたら、教えていただけないでしょうか。よろしくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー var t2 = "KJANN B CVA,"; delw = new Array("," , "."); for (i=0; delw[i]; i++){ if (t2.match(/delw[i]$/)){ t2 += 'del'; t2 = t2.replace(",del",""); } } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

>また、削除したい文字はたくさんあるため、配列化もしくはそれに >近いことが出来る必要があります。 配列にいれてあるとするなら… var t2 = "KJANN B CVA,"; delw = new Array("," , "."); t2 = t2.replace(new RegExp('[' + delw.join('') + ']$'), ''); みたいなのでは? 確か、[]内はエスケープ不要だったと思うけれど、確認しておいてください。ただし、最初に「^」を持ってきたりすると違う意味になっちゃうので、注意が必要だけれど…

pikopiko29
質問者

お礼

ありがとうございます。 質問が悪い中、希望通りのことが出来ました。 大変勉強になりました。 ありがとうございました。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

$なので… > #4

回答No.4

g ?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

最後の・・・であれば$がいるのでは? t2 = t2.replace(/(\.|,)$/,'');

pikopiko29
質問者

お礼

質問が分かりにくくて申し訳ありません。 削除したい文字は複数あるので配列化しておきたいです。

回答No.1

たんじゅんにこれではだめ? t2 = t2.replace( /\.|,/g, '' );

pikopiko29
質問者

お礼

回答ありがとうございます。 質問が分かりにくくて申し訳ありません。 削除したいものは文字列の最後にあった場合であることと。 例では2つ(「,」と「.」)示しましたが、実際には複数あるため配列で削除したい文字をリスト化しておきたいです。

関連するQ&A

  • 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]); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現 数値 lastMatch

    JavaScriptの正規表現について。 下記の文字列(例)を、1行ずつ分割して、最後にマッチした数値(23, 59, 6)を取得したいです。 1: かおり(23) 2: 景子 (59) 3: さとみ(6) 私なりに下記を記述しましたが、取得する値が1,2,3となってしまいました。不具合。 inputは、上記の文字列です。 arr=input.split("\n"); //1行ずつ分割 for (var i = 0 ; i < arr.length ; i++){ arr[i].match(/[0-9]+/); input=input+RegExp.lastMatch; } お手数ですが、よろしくお願いいたします。

  • 正規表現  マッチさせれない C#

    下記のもの全体にマッチさせる表現を考えていたのですが、 どぉしても思いつきません。 まだまだ正規表現についてわかっていないのでご教授いただけないでしょうか。 /// <summary> /// メソッド1 /// </summary> /// <param name="Out">1:入力文字,2:出力文字)</param> /// 文字列     の部分は行が増えたり減ったりするので /// と文字列と改行文字で1つのくくりにして それを任意の回数繰り返しでマッチさせようとしています。 ([/// .*] \r\n)*   (///[.<>/]* \r\n)*  など試しましたがマッチしません。 そもそもこのようなものをマッチさせること自体無理なのかもしれませんが その点も含めご教授お願いいただけますでしょうか。言語はC#です

  • 配列の中の一部を削除する方法がわかりません。

    配列の中の一部を削除する方法がわかりません。 Javascriptに、連想配列はないと、どこかのサイトで書いてありましたが やりたいことは、ある配列(連想配列)というより、オブジェクト?があり、 そこにキーと対応すrる値があるデータがあります。 キーを手がかりに、削除して一部のデータを削除する書き方を教えて欲しいです。 例えば var a = new Array(); for (var i = 0; i < 10; i++) { a[i] = [i]; } // この段階では、0=>[0], 1=>[1] ... 9=>[9]のデータがありますが、 // a[3] a[5] a[8]のデータをここで削除したい。 // 今回は、数値がキーですが文字列の場合も可能でしょうか? ??? for ( var i = 0; i < a.length; i++) { alert(a[i]); } // 7個のデータが表示される。 よろしくお願いいたします。

  • JavaScriptの正規表現/?<.+?>/について

    strからHTMLのタグを取り除いた文字列をxにしまうため var x=str.replace(/<.+?>/g,""); を使うそうですが /<.+?>/g をなぜ使うのかが分かりません /<.+>/g がまずいのは分かりますが・・・・ 教えていただければ幸いです

  • 正規表現のパターンマッチ

    配列の中から特定の文字を取り出す処理がうまくできません @test = ("aaa","bbb","t=1","v=3"," test:", " test:") 上記のような配列があったとして 一文字目がaからzで二文字目が=のものを取り出す処理と 一文字以上の空白の後ろにtest:があるものを取り出す処理は どのようにすればいいのでしょうか? 下記のような感じで書いたのですがうまくいきません @test = ("aaa","bbb","t=1","v=3"," test:", " test:") my $test = "test:"; foreach( @test ) { if( $_ =~/^[a-z]+k/) { print $_; } if( $_ =~/^\s+$test/) { print $_; } } よろしくお願いします

  • 配列で文字列の切り取り[JavaScript]

    配列で文字列の切り取りという言葉が正しいがどうかはわかりませんが、 以下のような配列があるとします。 var array1 = ["xx10","xx11","xx12","xx13"]; これを、下記のように"xx"だけを切り取って、新たな配列として生成できるでしょうか? var array2 = ["10","11","12","13"]; 宜しくお願いします。

  • phpのfor文の中で配列を作りたいです。

    $a = array(); $a[0]="あ"; $a[1]=""; $a[2]="い"; $a[3]=""; $a[4]=""; $a[5]="う"; のような配列がありfor文の中で文字列が一文字以上だったら配列$bに入れるということをしたいのですが、 $b=array(); for($i=0; $i<count($a); $i++){ $c = mb_strlen($a[$i]); if($c>=1){ $b = $a[$i]; } } var_dump($b); とすると$bには最後の”う”しか入りません。 $bを $b[0]="あ"; $b[1]="い"; $b[2]="う"; とするようにするにはどうしたらいいですか?

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

    配列に文字列を格納し、先頭が大文字または数字の文字列だけ別の配列に入れようとしています。 次のようにプログラムを作ったのですが、ifの行でエラーが出ます。 何が間違ってますか? mojiretu_array.each{|mojiretu| if mojiretu =~ [^a-z]\w+ mojiretu_out.push mojiretu end }

専門家に質問してみよう