我做一個正則表達式支票上的圖案function Object() {}
匹配與Array.toString(),我使用語句用繩子(^)開始正則表達式不能在IE8
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
- 替換
^
與.+
- >null
- 替換
^
與.{0}
- >正確
Array.toString().match(/.{1,10}function\s+([^\(]+)/)
Array.toString().match(/.+function\s+([^\(]+)/)
Array.toString().match(/.{0}function\s+([^\(]+)/)
最有趣的結果是與.{0}
,它的工作原理。但它實際上什麼都不匹配。我在想,如果Array.toString()
實際輸出function...
字符串之前的東西,但使用document.write()
不能表現出來,但它仍然沒有解釋.{0}
和^
不同(僅在IE8)
最後更新如何:
事實問題是Array.toString
不會以單行返回多行函數字符串。所以,正確的正則表達式跨瀏覽器的工作將是 Array.toString().match(/[\r\n]?function\s+([^\(]+)/)
至少你可能試圖輸出你的字符串來匹配,並看到問題。 – nicael
@nicael是的,我實際上在Chrome和IE8中輸出字符串,它們是相同的,這就是爲什麼我掙扎,因爲字符串是平等的,所以我希望正則表達式可以在兩個瀏覽器中工作。我已經更新了這個問題以供參考 –
^在IE上隨時都會失敗?你有沒有試過檢查其他泛型病例?用$(字符串的結尾)表達任何表達式? – nicael