[英]My regex doesn't work
我看不到創建新的regexp對象或使用/.../
之間的區別,因為如果執行以下操作,我會得到:
真假
alert(/^\d{4}$/.test(obj.value)+" "+(new RegExp("^\d{4}$")).test(obj.value));
提前致謝
從字符串創建RegExp對象時,必須考慮以下事實:字符串常量語法(如RegExp語法)會將\\
視為特殊字符:
alert(/^\d{4}$/.test(obj.value)+" "+(new RegExp("^\\d{4}$")).test(obj.value));
應該更好地工作。 注意字符串版本中的\\\\
而不是單個\\
。
當您遇到類似問題時會發生什么
var myRegExp = new RegExp( "blah blah \d blah blah" );
? 首先,解析器必須查看表達式的低杠桿部分,例如變量名, =
符號, new
等。 字符串常量是表達式的那些低級基本元素之一。 解析器必須將字符串的源代碼轉換為運行時字符串值,這涉及讀取引號之間的字符。 那里的\\d
表示-對於解析器的字符串部分,請記住-字符串應包含“ d”。 (“ d”字符並不特殊,因此\\d
確實不會在字符串中執行任何有趣的操作,但是\\
仍會被“吃掉”。)
因此,現在我們有了表達式的基本構建塊,因此在運行時可以使用解析器組裝的字符串值調用RegExp構造函數。 現在,該進行RegExp語法分析了。 RegExp解析器現在不會看到\\d
,因為在字符串常量的構造過程中\\
消失了。
因此,通過將傳遞給RegExp構造函數的字符串中的\\
加倍,可以確保單個\\
保留到正則表達式實際上被解釋為這樣的程度。 當您使用“本地”正則表達式語法( /.../
)時,您只需要一個\\
因為正則表達式僅被解析一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.