2012-07-08 79 views
0

我的字符串是这样的:“http://something.org/dom/My_happy_dog_%28is%29cool!”JavaScript正则表达式替换多个字符串?

如何删除所有初始域,多重下划线和百分比?

现在我只是在做一些多取代,像

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

,并继续下去,但它确实难看..任何帮助吗?

谢谢!

编辑:“我的快乐的狗是酷”

确切的投入将是所以我想摆脱最初的地址,并删除下划线和百分比,并把空间放在正确的地方!

问题是,试图把一个正则表达式在Chrome上“出错了”。这是Chrome还是我的正则表达式的问题?

+0

你想要什么输出? – 2012-07-08 23:55:33

回答

1

我建议:

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

JS Fiddle demo

我采取这种方法的原因是RegEx相当昂贵,并且通常很难调整到边缘情况变得不那么麻烦的程度;所以我选择使用简单的字符串操作来减少RegEx的工作。

切实上面创建一个给定str变量的子串,从lastIndexOf('/')的指数点(它你会想到什么),并加入1到这样子是从点/后不在之前。

正则表达式:(_)相匹配的下划线,在|只是作为一个or运营商和(%\d{2,})提供了相匹配连续发生两次数字字符,并遵循%迹象。

围绕|围绕该正则表达式的每个部分的括号,用来识别匹配基团,其被用于识别哪些部分应该由' '(单空间)被替换串中的参数传递给replace()第二。

参考文献:

+0

非常清楚,很好地解释了答案!谢谢! – Enrichman 2012-07-09 12:32:09

+0

非常欢迎,我很高兴能帮到你!并感谢*你*接受。 =) – 2012-07-09 12:33:00

1

您可以使用unescape的百分比解码:

str = unescape("http://something.org/dom/My_happy_dog_%28is%29cool!") 
str = str.replace("http://something.org/dom/",""); 
+0

...的多重实例? – Jay 2012-07-09 00:01:50

+0

对不起,在问题结束前按下输入!下划线的多个实例?我试过jsfiddle这个正则表达式:str.replace(/ _/g,“”);它正在工作,但在Chrome上(在检查模式下)它不工作(“出错了”)。是铬或正则表达式错误的问题? – Enrichman 2012-07-09 00:04:38

+0

我刚刚在我的Chrome检查器中试过,它工作正常。也许你可以尝试在'.html'页面的'

0

好吧,如果你想更换所有的东西,我认为你需要是这样的:从给定输入

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

test

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,"");