我使用此正则表达式代码来解析网址:
/^(((http|https):\/\/)+[www.])?+\s*\S+\s*+(.com|.es|.net|.org|.co)$/ig
它完全适用于https://regex101.com/r/bX5oM4/1
但是在我的控制台上我一直得到:
SyntaxError:无效的正则表达式:
/^(((http|https):\/\/)+[www\.])?+\s*\S+\s*+(\.com|\.es|\.net|\.org|\.co)$/
:无需重复
我试图逃避+但它不起作用。我对正则表达式有点新意,所以它可以是任何东西。
答案 0 :(得分:2)
这是你的固定正则表达式:
^(?:https?:\/\/www\.)?[a-zA-Z0-9]\S+(\.(?:com|es|net|org|co))$
请参阅demo
或者,匹配较大字符串中的字符串:
\b(?:https?:\/\/www\.)?[a-zA-Z0-9]\S+(?:\.(?:com|es|net|org|co))\b
请参阅another demo
在JavaScript中,您无法将+
设置为?
量词。
另请注意,[www.]
匹配1个字符,w
或.
,因为它是一个字符类。你必须意味着一个群体,因此你需要圆括号,而不是方括号。
我删除了不必要的群组,将它们重新组合并逃脱了点。请注意,未转义的点匹配任何字符,但换行符。
所以,正则表达式:
^
- 断言字符串开头的位置(?:https?:\/\/www\.)?
- 可选择匹配http
或https
,然后//www.
字面上匹配\w\S+
- 1个alhoanumeric和1个或多个非空白字符(\.(?:com|es|net|org|co))
- 匹配圆点,然后匹配圆括号中的任何替代项$
- 断言字符串结尾答案 1 :(得分:0)
试试这个(更新!)
^((http|https):\/\/)?([\w]+[.-]?)+\.(com|es|net|org|co|uk|de)$
而不是
/^(((http|https):\/\/)+[www.])?+\s*\S+\s*+(.com|.es|.net|.org|.co)$/ig
+
后面有一个额外?
,*
后面还有一个[www.]
。还有其他一些事情并不是很好,正如stribizhev指出的那样正确!
这个正则表达式正在寻找有限范围的顶级域名(例如法语页面不会通过)。 ([\w]+[.-]?)+
在语法上是错误的,也是多余的,因为任何域名都可以包含子域名(由<img />
表示)和“www”。只是其中一个可能的。