正则表达式 - 我一直得到“没有什么可重复”的例外

时间:2015-08-04 08:46:11

标签: javascript regex angularjs

我使用此正则表达式代码来解析网址:

/^(((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)$/:无需重复

我试图逃避+但它不起作用。我对正则表达式有点新意,所以它可以是任何东西。

2 个答案:

答案 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\.)? - 可选择匹配httphttps,然后//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”。只是其中一个可能的。