dポイントプレゼントキャンペーン実施中!

お世話になります。
このような文字列置換可能でしょうか
'|<a href=・・・>(・・・'
・・・は、任意の文字列

'<a href=・・・>(・・・'
と、いうようにです。

つまり、文字列の中に'|'と、'('が有ったら、
'|'のみを取り除いた文字列を作成する
と、いうことです。
そして、文字列中に同様なパターンが複数回有れば、同時に全てを同様に処理したいのですが。
よろしくお願いいたします。

A 回答 (3件)

例えばこんな感じですか



var str = '|<a href=XXX>(YYY'
str = str.replace(/\|(?=.+?\()/g, "");
alert(str);

ただし、この例では '|' の後に '(' が出てくるかという判断しかしていないので、複数の '|' と '(' が一対一に対応していなくても '|' が削除されます。
また、'|' と '(' の間に一文字も無い場合は置換しないようになっています。'|' と '(' が引っ付いていても置換するには + を * に変えてください。
    • good
    • 1
この回答へのお礼

UKYさん、ありがとうございます。
>複数の '|&nbsp;&nbsp;' と '(' が一対一に対応していなくても '|&nbsp;&nbsp;' が削除されます。
そうなりました。

複数の '|&nbsp;&nbsp;' と '('が一対一に対応している部分と、'|&nbsp;&nbsp;'だけの部分が有り、
一対一に対応している部分のみの'|&nbsp;&nbsp;'を削除したいのですが、難しいでしょうか。

お礼日時:2006/07/20 20:28

一対一対応のみ置換するパターンだとこんな風になります。



// 左側を優先して削除
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);

優先順位の違いに応じて二パターン作りましたが、たぶん質問者さんが望んでいるのは後者の方かと思います。
ちょっと正規表現が複雑になってしまいました。もしかしたらもっとうまいやり方があるかもしれません。
    • good
    • 0
この回答へのお礼

UKYさん、お早うございます。
できました。ありがとうございます。
>// 右側を優先して削除
の方そのものです。

ご丁寧に教えていただいて、厚かましいですが、
正規表現について勉強するための
HP、書籍などご紹介いただけないものでしょうか。
この質問をする前にも正規表現について調べたのですが、見つけることができませんでした。
もし、できましたらよろしくお願いいたします。

お礼日時:2006/07/21 05:26

これでどうでしょうか。


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(/\|/g,"");
alert(d);
}else{
alert(a);
}
    • good
    • 0
この回答へのお礼

お早うございます。
早速ありがとうございます。

「文字列の中に'|&nbsp;&nbsp;'と、'('が有ったら、
'|&nbsp;&nbsp;'のみを取り除いた文字列を作成する」
と、いう私の説明が悪かったです。

「文字列の中に'|&nbsp;&nbsp;'と、'('で、文字列が囲まれていたら、囲まれている文字列と'('はそのままで、'|&nbsp;&nbsp;'のみを取り除いた文字列を作成する」

と、いうように説明しなけれなりませんでした。
つまり、教えていただいた方法ですと、
'|&nbsp;&nbsp;'と、'('で、文字列が囲まれていなくても'|&nbsp;&nbsp;'が全て削除されてしまいました。

説明が悪くて申し訳ありませんでした。

お礼日時:2006/07/20 04:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!