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 相当昂贵,并且通常很难微调到边缘情况变得不那么麻烦的程度。所以我选择使用简单的字符串操作来减少 RegEx 的工作。

实际上,上面创建了给定str变量的子字符串,从索引点lastIndexOf('/')(它完全符合您的预期)并添加1到该点,因此子字符串来自它之前的点之后的点/

正则表达式:(_)匹配下划线,|仅用作or运算符,(%\d{2,})用于匹配连续出现两次并跟随%符号的数字字符。

围绕 regex 的每个部分的括号|用于标识匹配组,这些组用于标识哪些部分应该被' '传递给的第二个参数中的(单空格)字符串替换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 回答