簡體   English   中英

以字符串(^)開頭的正則表達式不能與IE8中的Array.toString()匹配

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

  1. 匹配字符串而不是Array.toString() -> 正確

' function Array() { [native code] } '.match(/^function\\s+([^\\(]+)/)

  1. ^替換為.{1,10} -> null

Array.toString().match(/.{1,10}function\\s+([^\\(]+)/)

  1. ^替換為.+ -> null

Array.toString().match(/.+function\\s+([^\\(]+)/)

  1. .{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.

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