0
我有以下正則表達式,它決定(我希望)如果一個字符串是一個URL或不是。JavaScript正則表達式在執行後有不同的結果
/^(((\/[\w-]+)+\/?)|(((http|ftp|https):\/\/)[\w-]+))((\.[\w-]+)?([\w.,@?^=%&lL\/~+#-]*[\[email protected]?~=%&:\/~+#-])?)$/gi
我發現是,如果我是正則表達式保存到一個對象,然後測試相同的字符串兩次,我得到兩個不同的結果顯示在此的jsfiddle
https://jsfiddle.net/gpc5trsw/
中的代碼此琴是這樣的:
var test = /^(((\/[\w-]+)+\/?)|(((http|ftp|https):\/\/)[\w-]+))((\.[\w-]+)?([\w.,@?^=%&lL\/~+#-]*[\[email protected]?~=%&:\/~+#-])?)$/gi
var str = "/api/WebTest";
document.getElementById("firstCtr").innerHTML = /^(((\/[\w-]+)+\/?)|(((http|ftp|https):\/\/)[\w-]+))((\.[\w-]+)?([\w.,@?^=%&lL\/~+#-]*[\[email protected]?~=%&:\/~+#-])?)$/gi.test(str)
document.getElementById("secondCtr").innerHTML = /^(((\/[\w-]+)+\/?)|(((http|ftp|https):\/\/)[\w-]+))((\.[\w-]+)?([\w.,@?^=%&lL\/~+#-]*[\[email protected]?~=%&:\/~+#-])?)$/gi.test(str)
document.getElementById("first").innerHTML = test.test(str)
document.getElementById("second").innerHTML = test.test(str)
具有以下HTML:
<div>
First Run Control: <span id="firstCtr"></span>
</div>
<div>
Second Run Control: <span id="secondCtr"></span>
</div>
<hr/>
<div>
First Run: <span id="first"></span>
</div>
<div>
Second Run: <span id="second"></span>
產生的HTML輸出是這樣:
首次運行控制:真
第二運行控制:真
首次運行:真
第二次運行:false
爲什麼測試結果第二次在對象版本上測試時發生了變化? JavaScript可能會是一個殘酷的情婦有時......
[刪除'g'標誌](https://jsfiddle.net/tusharj/gpc5trsw/1/) – Tushar