2012-10-18 54 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'類。 –