- ベストアンサー
文字列の置換
お世話になります。 このような文字列置換可能でしょうか ' | <a href=・・・>(・・・' ・・・は、任意の文字列 を ' <a href=・・・>(・・・' と、いうようにです。 つまり、文字列の中に'| 'と、'('が有ったら、 '| 'のみを取り除いた文字列を作成する と、いうことです。 そして、文字列中に同様なパターンが複数回有れば、同時に全てを同様に処理したいのですが。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えばこんな感じですか var str = ' | <a href=XXX>(YYY' str = str.replace(/\| (?=.+?\()/g, ""); alert(str); ただし、この例では '| ' の後に '(' が出てくるかという判断しかしていないので、複数の '| ' と '(' が一対一に対応していなくても '| ' が削除されます。 また、'| ' と '(' の間に一文字も無い場合は置換しないようになっています。'| ' と '(' が引っ付いていても置換するには + を * に変えてください。
その他の回答 (2)
- UKY
- ベストアンサー率50% (604/1207)
一対一対応のみ置換するパターンだとこんな風になります。 // 左側を優先して削除 var str = ' | AAA| <a href=XXX>(YYY'; str = str.replace(/\| (.+?\()/g, "$1"); alert(str); // 右側を優先して削除 var str = ' | AAA| <a href=XXX>(YYY'; str = str.replace(/\| ((?:(?!\| ).)+?\()/g, "$1"); alert(str); 優先順位の違いに応じて二パターン作りましたが、たぶん質問者さんが望んでいるのは後者の方かと思います。 ちょっと正規表現が複雑になってしまいました。もしかしたらもっとうまいやり方があるかもしれません。
お礼
UKYさん、お早うございます。 できました。ありがとうございます。 >// 右側を優先して削除 の方そのものです。 ご丁寧に教えていただいて、厚かましいですが、 正規表現について勉強するための HP、書籍などご紹介いただけないものでしょうか。 この質問をする前にも正規表現について調べたのですが、見つけることができませんでした。 もし、できましたらよろしくお願いいたします。
これでどうでしょうか。 a="' \; \;| \; \;| \; \;<a href=・・・>\(・・・'"; b=a.match(/\| \; \;/g)!=null; c=a.match(/\(/g)!=null; if(b&&c){ d=a.replace(/\| /g,""); alert(d); }else{ alert(a); }
お礼
お早うございます。 早速ありがとうございます。 「文字列の中に'| 'と、'('が有ったら、 '| 'のみを取り除いた文字列を作成する」 と、いう私の説明が悪かったです。 「文字列の中に'| 'と、'('で、文字列が囲まれていたら、囲まれている文字列と'('はそのままで、'| 'のみを取り除いた文字列を作成する」 と、いうように説明しなけれなりませんでした。 つまり、教えていただいた方法ですと、 '| 'と、'('で、文字列が囲まれていなくても'| 'が全て削除されてしまいました。 説明が悪くて申し訳ありませんでした。
お礼
UKYさん、ありがとうございます。 >複数の '| ' と '(' が一対一に対応していなくても '| ' が削除されます。 そうなりました。 複数の '| ' と '('が一対一に対応している部分と、'| 'だけの部分が有り、 一対一に対応している部分のみの'| 'を削除したいのですが、難しいでしょうか。