當其他人是正確的,是通過其他途徑解析函數會更容易,下面是如何轉換正則表達式。
該正則表達式不包含JavaScript中沒有的高級構造,或者具有不同的含義。因此,你可以簡單地使用相同的表達字面正則表達式:
var r = /((https?|ftp)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?([a-z0-9-.]*)\.([a-z]{2,3})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/;
現在正則表達式文字不支持級聯,而且也不JS有x
修改,這將允許您分割的多行表達。因此,如果您想將模式保留在多個部分中,要對其進行註釋,則必須再次連接字符串並將該字符串傳遞給構造函數RegExp
。這裏美中不足的是,反斜槓需要加倍,因爲JavaScript的字符串,編譯將會吞掉每個轉義反斜槓(所以你需要逃避反斜槓要他們達到正則表達式引擎):
var rString = "((https?|ftp)\\:\\/\\/)?"; // SCHEME
rString += "([a-z0-9+!*(),;?&=\\$_.-]+(\\:[a-z0-9+!*(),;?&=\\$_.-]+)[email protected])?"; // User and Pass
rString += "([a-z0-9-.]*)\\.([a-z]{2,3})"; // Host or IP
rString += "(\\:[0-9]{2,5})?"; // Port
rString += "(\\/([a-z0-9+\\$_-]\\.?)+)*\\/?"; // Path
rString += "(\\?[a-z+&\\$_.-][a-z0-9;:@&%=+\\/\\$_.-]*)?"; // GET Query
rString += "(#[a-z_.-][a-z0-9+\\$_.-]*)?"; // Anchor
var r = new RegExp(rString);
在任何情況下,r
現在可以與您最喜歡的匹配功能(字符串上的match
或r
上的test
或exec
)一起使用。
它應該是相同的。你試過了嗎? –
可能的重複http://stackoverflow.com/questions/9309349/convert-php-regex-to-javascript-regex – Xavier
@x_vi_r:這絕對不是重複的。 –