![](/img/trans.png)
[英]How to make Array.toString() in IE9 compatible with modern browsers
[英]Regular Expression with start of string (^) cannot match Array.toString() in IE8
我正在對模式function Object() {}
進行正則表達式檢查,並且使用了以下語句
Array.toString().match(/^function\\s+([^\\(]+)/)
該語句在現代瀏覽器中有效,並返回["function Array", "Array"]
但是在Internet Explorer 8中,以上語句始終返回null
。 經過一番嘗試和錯誤后,我發現問題出現在^
符號處。 當我將其刪除到Array.toString().match(/function\\s+([^\\(]+)/)
,結果變得正確。
但是后者的正則表達式在邏輯上是不正確的,因為它不能保證function
關鍵字從頭開始,因此可能會產生誤報。
我想知道是否有解決方法,或者我錯過了什么? 謝謝。
更新:
在@nicael建議之后,我測試了一些正則表達式,發現了一個有趣的結果
Correct
意味着它返回["function Array", "Array"]
Array.toString()
-> 正確 ' function Array() { [native code] } '.match(/^function\\s+([^\\(]+)/)
^
替換為.{1,10}
-> null
Array.toString().match(/.{1,10}function\\s+([^\\(]+)/)
^
替換為.+
-> null
Array.toString().match(/.+function\\s+([^\\(]+)/)
.{0}
-> 更正 替換^
.{0}
Array.toString().match(/.{0}function\\s+([^\\(]+)/)
最有趣的結果是使用.{0}
可以正常工作。 但這實際上沒有任何匹配。 我在想Array.toString()
實際上在function...
之前輸出了一些東西function...
字符串,但是使用document.write()
無法顯示它,但仍然無法解釋.{0}
和^
區別(僅在IE8中)
最終更新:
事實證明,問題在於Array.toString
不在一行中而是在多行中返回函數字符串。 因此,適用於所有瀏覽器的正確正則表達式將是Array.toString().match(/[\\r\\n]?function\\s+([^\\(]+)/)
如果在IE8控制台中鍵入Array.toString()
,則可以看到輸出不是字符串
`function Array() { [native code] }`
相反,輸出是
`
function Array() {
[native code]
}
`
也就是說,在function
之前有一個換行符。 這就是為什么您的正則表達式不匹配的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.