Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式-我不断得到;“没有什么可重复的”;例外_Javascript_Regex_Angularjs - Fatal编程技术网

Javascript 正则表达式-我不断得到;“没有什么可重复的”;例外

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有点陌生,所以它可以是任何东西。试试这

我使用此正则表达式代码解析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
您在
后面有一个额外的
+
,在
*
后面还有一个。还有其他一些事情不太好,斯特里比雪夫说得很对


此正则表达式正在寻找有限范围的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.
  • \w\S+
    -1个数字字符和1个或多个非空白字符
  • (\.(?:com | es | net | org | co))
    -匹配一个点,然后匹配圆括号中的任何备选方案
  • $
    -断言字符串的结尾

您使用的是哪种语言?Javascript,请注意它在regex101上不起作用。如果您这样做,您也会得到错误:“前面的标记是不可量化的”它起作用了!,谢谢你,图萨。你说得对,詹姆斯·索普,也谢谢你!。如何结束问题或投票选出正确答案?这是正则表达式。我不认为这是意料之中的。非常感谢!我正在努力解决新行的问题,我想匹配字符串中的任何url。例如:“嗨,我的名字是www.google.com”,这必须匹配,但它不匹配。然后删除锚定
^
$
,改用
\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