2011-05-23 24 views
9
var pattern = /(?:)/ 

從我的測試來看,它似乎符合所有要求。這是定義的行爲嗎?在JavaScript中,空的正則表達式模式是否定義了行爲?

+4

@mini:這是不正確的。相反的問題已經出現並引起了很多關注。 – SLaks 2011-05-23 01:29:08

+1

我可以想象一個系統,用戶需要提供一個匹配「東西」的正則表達式字符串,並且他的代碼將該正則表達式封裝到一個「(?:...)」中,然後對其進行處理。事實上,不久前有人問起這件事情。他們讓人們在運行時提供正則表達式。 – Cheeso 2011-05-23 01:29:52

+0

@SLaks:什麼是相反的問題? – Ryan 2011-05-23 01:30:30

回答

13

這並沒有直接回答這個問題,但這裏是規範不得不說的空正則表達式:

15.5.4.14 String.prototype.split (separator, limit)

分離器的值可能是一個空字符串,一個空的正則表達式,或者一個可以匹配空字符串的正則表達式。

而且從7.8.5 Regular Expression Literals

注意正則表達式文字可能不是空的;而不是表示空的正則表達式文字,這些字符//開始單行註釋。要指定空的正則表達式,請使用:/(?:)/

因此,假定它是.split()中的分隔符的可接受值,我猜測這是定義的行爲,作爲分離每個字符的方法。

"fjeij;als#%^&é.\n isoij\t;oi`1=+-]\r".split(/(?:)/); 

["f", "j", "e", "i", "j", ";", "a", "l", "s", "#", "%", "^", "&", "é", ".", " 
", " ", "i", "s", "o", "i", "j", " ", ";", "o", "i", "`", "1", "=", "+", "-", "]", " 
"] 
+1

謝謝!這似乎是合理定義的,因爲模式匹配不同上下文中的不同字符串會很奇怪。 – ClosureCowboy 2011-05-23 01:48:35

+2

嘗試在控制檯'new RegExp()':)) – gaRex 2011-05-23 09:20:46

5

/(?:)/匹配「nothing」,匹配所有內容。一切都沒有。嘿嘿。
是的,我期待這一點。

相關問題