2010-06-25 91 views
101

我需要使用java腳本來轉義正則表達式特殊字符。我可以如何實現這一點?任何幫助,應該感激。如何使用javascript轉義正則表達式特殊字符?


感謝您的快速reply.But我需要逃避正規expression.I的所有特殊字符都通過這個代碼嘗試,但我不能達到的效果。

RegExp.escape=function(str) 
      { 
       if (!arguments.callee.sRE) { 
        var specials = [ 
         '/', '.', '*', '+', '?', '|', 
         '(', ')', '[', ']', '{', '}', '\\' 
        ]; 
        arguments.callee.sRE = new RegExp(
        '(\\' + specials.join('|\\') + ')', 'gim' 
       ); 
       } 
       return str.replace(arguments.callee.sRE, '\\$1'); 

      } 

function regExpFind() { 
      <%--var regex = new RegExp("\\[munees\\]","gim");--%> 
        var regex= new RegExp(RegExp.escape("[Munees]waran")); 
        <%--var regex=RegExp.escape`enter code here`("[Munees]waran");--%> 
        alert("Reg : "+regex); 
       } 

這是什麼問題?請指導我。

+4

請參閱[如何在javascript中跳過正則表達式?](http://stackoverflow.com/questions/2593637/how-to-escape-regular-expression-in-javascript) – 2010-06-25 02:25:37

回答

11

使用反斜槓來轉義字符。例如:

/\\d/ 

這將匹配\ d的,而不是一個數字字符

269

使用\字符轉義有一個正則表達式中的特殊含義的字符。

要自動完成它,你可以這樣做:

function escapeRegExp(text) { 
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 
} 

更新:現在有規範這種方法,可能在ES2016建議:https://github.com/benjamingr/RegExp.escape

更新:以上建議被拒絕了,所以如果你需要的話,繼續自己實現這個。

+1

'''有什麼特別之處?只是好奇。 – Viliam 2013-05-20 14:10:21

+1

@Viliam我不知道確切的細節,但是爲了向後兼容一些舊的/有問題的JavaScript引擎,需要轉義IIRC。 – 2013-05-20 18:36:57

+0

@Muneeswaran這應該是被接受的答案! – 2015-01-27 14:18:17