2012-10-18 55 views
4

我的正则表达式不是那么热,所以对于这个非常新问题的道歉。在正则表达式批量逃脱

我使用String.replace将字符串“../../libs/bootstrap/less”更改为“bootstrap”。目前我的正则表达式是这样的:

myString.replace(\.\.\/\.\.\/libs\/bootstrap\/less/g, 'bootstrap); 

我认为必须有更好的方法来逃避这条道路。是否可以指定一整块要转义的东西,比如/\"../../foo/bar/baz"/?

+0

为什么它必须是正则表达式? –

+1

@Jack因此它可以代替*所有*匹配。 –

+0

可能的重复[你如何将一个变量传递给正则表达式JavaScript?](http://stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression -javascript) –

回答

1

据我所知,正则表达式中没有全局/块转义。如果你想在这种情况下避免逃跑,你可以选择做以下事情:

myString.replace(/([.]{2}[/]){2}libs[/]bootstrap[/]less/g, "bootstrap"); 

。和/在字符集内指定时不需要转义[]

+0

我结束了这个:([。] {2} \ /){2} libs \/bootstrap \/less 谢谢! – robdodson

0

为了更方便正则表达式中引用您可以使用下面的代码是什么

RegExp.quote = function(str) { 
    return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 
}; 

然后你运用它,像这样:

var expr = RegExp.quote('../../libs/bootstrap/less'); 
mystring.replace(new RegExp(expr, 'g'), 'bootstrap'); 
+0

不需要额外的功能,OP需要的是语言本身。 – SomeKittens

+0

@SomeKittens OP正在寻求更好的途径来逃避这条道路,这个答案只是更通用。 –

+0

@MattWhipple你知道我们一直在谈论Java ** Script **这一次吗?没有'Pattern'类。 –