Javascript 正则表达式-我不断得到;“没有什么可重复的”;例外
我使用此正则表达式代码解析URL:Javascript 正则表达式-我不断得到;“没有什么可重复的”;例外,javascript,regex,angularjs,Javascript,Regex,Angularjs,我使用此正则表达式代码解析URL: /^(((http|https):\/\/)+[www.])?+\s*\S+\s*+(.com|.es|.net|.org|.co)$/ig 它在你的电脑上运行得很好 但在我的控制台上,我不断得到: 语法错误:无效的正则表达式:/^((http | https):\/\/)+[www\.]?+\s*\s*+(\.com |\.es |\.net |\.org |\.co)$/:无需重复 我试着逃离+但没用。我对regex有点陌生,所以它可以是任何东西。试试这
/^(((http|https):\/\/)+[www.])?+\s*\S+\s*+(.com|.es|.net|.org|.co)$/ig
它在你的电脑上运行得很好
但在我的控制台上,我不断得到:
语法错误:无效的正则表达式:/^((http | https):\/\/)+[www\.]?+\s*\s*+(\.com |\.es |\.net |\.org |\.co)$/
:无需重复
我试着逃离+但没用。我对regex有点陌生,所以它可以是任何东西。试试这个(更新!)
而不是
/^(((http|https):\/\/)+[www.])?+\s*\S+\s*+(.com|.es|.net|.org|.co)$/ig
您在?
后面有一个额外的+
,在*
后面还有一个。还有其他一些事情不太好,斯特里比雪夫说得很对
此正则表达式正在寻找有限范围的TLD。。。(例如,法语页面将无法通过)。
[www.]
在语法上是错误的,而且是多余的,因为任何域名都可以有子域(用([\w]+[.-]?)+
表示),而“www.”只是可能的子域之一。这是您的固定正则表达式:
^(?:https?:\/\/www\.)?[a-zA-Z0-9]\S+(\.(?:com|es|net|org|co))$
看
或者,要匹配较大字符串中的字符串:
\b(?:https?:\/\/www\.)?[a-zA-Z0-9]\S+(?:\.(?:com|es|net|org|co))\b
看
在JavaScript中,不能将+
设置为?
量词
另外,请注意,[www.]
匹配一个字符,可以是w
或
,因为它是一个字符类。你一定是指一群人,因此你需要圆括号,而不是方括号
我删除了不必要的组,重新组合了一点,避开了点。请注意,除换行符外,未换行的点与任何字符都匹配
因此,正则表达式:
-在字符串开头声明位置^
-可选择匹配(?:https?:\/\/www\)?
或http
,然后按字面意思匹配https
//www.
-1个数字字符和1个或多个非空白字符\w\S+
-匹配一个点,然后匹配圆括号中的任何备选方案(\.(?:com | es | net | org | co))
-断言字符串的结尾$
^
和$
,改用\b
。谢谢。我不知道为什么,但是有人投你反对票。我把你标记为正确答案,谢谢你的帮助。我将尝试\b。对于“\s*\s+\s*”这件事,我试图不允许空白。您认为我应该使用[^-\s]吗?只需从模式中删除\s*
。我更新了图案,不客气。注:我还添加了[a-zA-Z0-9]
,这样得到的字符串就不会以标点符号开头。
\b(?:https?:\/\/www\.)?[a-zA-Z0-9]\S+(?:\.(?:com|es|net|org|co))\b