0

「http://something.org/dom/My_happy_dog_%28is%29cool!」のような文字列を作成しました。

最初のドメイン、複数のアンダースコア、パーセンテージなどをすべて削除するにはどうすればよいですか?

今のところ、次のように複数の置換を行っているだけです

str = str.replace("http://something.org/dom/","");
str = str.replace("_%28"," ");

続けてください、しかしそれは本当に醜いです..何か助けはありますか?

ありがとう!

編集:

正確な入力は、「私の幸せな犬はかっこいいです!」です。だから私は最初のアドレスを取り除き、アンダースコアとパーセンテージを取り除き、適切な場所にスペースを入れたいと思います!

問題は、Chrome に正規表現を置こうとすると「何かがうまくいかない」ことです。それはChromeまたは私の正規表現の問題ですか?

4

5 に答える 5

1

unescapeパーセンテージをデコードするために使用できます。

str = unescape("http://something.org/dom/My_happy_dog_%28is%29cool!")
str = str.replace("http://something.org/dom/","");
于 2012-07-08T23:52:26.660 に答える
1

正規表現を使用して、不要なものを取り除くのではなく、必要なものを引き出すことができるかもしれません。何を守ろうとしているのですか?

次のようにチェーンすることもできます。

str.replace("http://something.org/dom/", "").replace("something else", "");
于 2012-07-08T23:57:35.770 に答える
1

私はお勧めします:

var str =  "http://something.org/dom/My_happy_dog_%28is%29cool!";
str.substring(str.lastIndexOf('/')+1).replace(/(_)|(%\d{2,})/g,' ');

JS フィドルのデモ

私がこのアプローチを採用した理由は、RegEx はかなり高価であり、エッジ ケースがそれほど問題にならないように微調整するのが難しい場合が多いためです。そこで、単純な文字列操作を使用して正規表現の作業を減らすことにしました。

事実上、上記は指定された変数の部分文字列を作成し、 (これはまさに期待どおりの動作をします)strのインデックス ポイントから追加し、部分文字列はその前ではなくのポイントから作成されます。lastIndexOf('/')1/

正規表現:(_)はアンダースコアに一致し、は演算子としてのみ機能し、 は 2 回連続して発生し、記号に続く数字文字に一致するように|機能します。or(%\d{2,})%

の周りの正規表現の各部分を囲む括弧は、一致するグループを識別するのに役立ちます。これは、に渡される引数の 2 番目の (単一スペース) 文字列で|どの部分を置き換える必要があるかを識別するために使用されます。' 'replace()

参考文献:

于 2012-07-09T00:01:00.103 に答える
0

問題を正確に定義していません。で終わるすべての文字列を取り除くには、次のように%<digit><digit> 言います。

var re = /.*%\d\d/g;
var str = str.replace(re, "");
于 2012-07-09T00:00:34.830 に答える
0

わかりました、それらすべてを置き換えたい場合は、次のようなものが必要になると思います:

/(http:\/\/.*\.[a-z]{3}\/.*\/)|(\%[a-z0-9][a-z0-9])|_/g

テスト

var string = "http://something.org/dom/My_happy_dog_%28is%29cool!";
string = string.replace(/(http:\/\/.*\.[a-z]{3}\/.*\/)|(\%[a-z0-9][a-z0-9])|_/g,"");
于 2012-07-09T00:02:49.967 に答える