• ベストアンサー

文字列の置換

お世話になります。 このような文字列置換可能でしょうか '&nbsp;&nbsp;|&nbsp;&nbsp;<a href=・・・>(・・・' ・・・は、任意の文字列 を '&nbsp;&nbsp;<a href=・・・>(・・・' と、いうようにです。 つまり、文字列の中に'|&nbsp;&nbsp;'と、'('が有ったら、 '|&nbsp;&nbsp;'のみを取り除いた文字列を作成する と、いうことです。 そして、文字列中に同様なパターンが複数回有れば、同時に全てを同様に処理したいのですが。 よろしくお願いいたします。

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

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

例えばこんな感じですか var str = '&nbsp;&nbsp;|&nbsp;&nbsp;<a href=XXX>(YYY' str = str.replace(/\|&nbsp;&nbsp;(?=.+?\()/g, ""); alert(str); ただし、この例では '|&nbsp;&nbsp;' の後に '(' が出てくるかという判断しかしていないので、複数の '|&nbsp;&nbsp;' と '(' が一対一に対応していなくても '|&nbsp;&nbsp;' が削除されます。 また、'|&nbsp;&nbsp;' と '(' の間に一文字も無い場合は置換しないようになっています。'|&nbsp;&nbsp;' と '(' が引っ付いていても置換するには + を * に変えてください。

rqg2010
質問者

お礼

UKYさん、ありがとうございます。 >複数の '|&nbsp;&nbsp;' と '(' が一対一に対応していなくても '|&nbsp;&nbsp;' が削除されます。 そうなりました。 複数の '|&nbsp;&nbsp;' と '('が一対一に対応している部分と、'|&nbsp;&nbsp;'だけの部分が有り、 一対一に対応している部分のみの'|&nbsp;&nbsp;'を削除したいのですが、難しいでしょうか。

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

一対一対応のみ置換するパターンだとこんな風になります。 // 左側を優先して削除 var str = '&nbsp;&nbsp;|&nbsp;&nbsp;AAA|&nbsp;&nbsp;<a href=XXX>(YYY'; str = str.replace(/\|&nbsp;&nbsp;(.+?\()/g, "$1"); alert(str); // 右側を優先して削除 var str = '&nbsp;&nbsp;|&nbsp;&nbsp;AAA|&nbsp;&nbsp;<a href=XXX>(YYY'; str = str.replace(/\|&nbsp;&nbsp;((?:(?!\|&nbsp;&nbsp;).)+?\()/g, "$1"); alert(str); 優先順位の違いに応じて二パターン作りましたが、たぶん質問者さんが望んでいるのは後者の方かと思います。 ちょっと正規表現が複雑になってしまいました。もしかしたらもっとうまいやり方があるかもしれません。

rqg2010
質問者

お礼

UKYさん、お早うございます。 できました。ありがとうございます。 >// 右側を優先して削除 の方そのものです。 ご丁寧に教えていただいて、厚かましいですが、 正規表現について勉強するための HP、書籍などご紹介いただけないものでしょうか。 この質問をする前にも正規表現について調べたのですが、見つけることができませんでした。 もし、できましたらよろしくお願いいたします。

noname#20964
noname#20964
回答No.1

これでどうでしょうか。 a="'&nbsp\;&nbsp\;|&nbsp\;&nbsp\;|&nbsp\;&nbsp\;<a href=・・・>\(・・・'"; b=a.match(/\|&nbsp\;&nbsp\;/g)!=null; c=a.match(/\(/g)!=null; if(b&&c){ d=a.replace(/\|&nbsp;&nbsp;/g,""); alert(d); }else{ alert(a); }

rqg2010
質問者

お礼

お早うございます。 早速ありがとうございます。 「文字列の中に'|&nbsp;&nbsp;'と、'('が有ったら、 '|&nbsp;&nbsp;'のみを取り除いた文字列を作成する」 と、いう私の説明が悪かったです。 「文字列の中に'|&nbsp;&nbsp;'と、'('で、文字列が囲まれていたら、囲まれている文字列と'('はそのままで、'|&nbsp;&nbsp;'のみを取り除いた文字列を作成する」 と、いうように説明しなけれなりませんでした。 つまり、教えていただいた方法ですと、 '|&nbsp;&nbsp;'と、'('で、文字列が囲まれていなくても'|&nbsp;&nbsp;'が全て削除されてしまいました。 説明が悪くて申し訳ありませんでした。

関連するQ&A