2011-08-12 29 views
0

我有點困惑於我應該用來檢測".-", "-."的RegExp,它確實通過了這個組合作爲有效,但在同一時間,"-_","_-"也得到驗證。我是否錯過了某些東西或者沒有正確地逃避某些事情?JS - 用於檢測「.-」,「 - 」的RegExp。

var reg=new RegExp("(\.\-)|(\-\.)"); 

實際上似乎任何組合包含'-'獲得通過。它

知道了,謝謝大家。

+0

如果您想知道結果表達式,請在控制檯中複製RegExp(「(\。\ - )|(\ - \。)」)。輸出是'/(.-)|( - 。)/'和'.'匹配任何字符。 –

回答

2

您需要使用

"(\\.-)|(-\\.)" 
+0

Thx for clearing非常感謝 – Sleeperson

1

由於您使用RegExp構造函數而不是/的字符串,因此需要轉義兩次。

>>> "asd_-ads".search("(\.\-)|(\-\.)") 
3 
>>> "asd_-ads".search(/(\.\-)|(\-\.)/) 
-1 
>>> "asd_-ads".search(new RegExp('(\\.\-)|(\-\\.)')) 
-1 
+0

這些不是'''分隔符「,他需要跳過'''''因爲他使用**字符串**作爲表達式。 –

+0

@Felix我現在以更正確的方式解釋。 – sapht

0

您正在使用雙引號,因此.沒有得到一個反斜線,用這個符號:

var reg = /(\.\-)|(\-\.)/; 
1

在符號/(\.\-)|(\-\.)/,該表達是正確的。 在您選擇的符號中,您必須加倍所有反斜槓,因爲它本身仍有其特殊含義,如\\,\n等等。
注意沒有必要逃避這裏的破折號:var reg = new RegExp("(\\.-)|(-\\.)");

如果您不需要區分匹配,你可以使用一個單一的封閉拍攝,或者根本沒有,如果你只是要檢查的匹配: "\\.-|-\\."仍然有效。