簡體   English   中英

我的正則表達式不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM