Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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/17.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 - Fatal编程技术网

Javascript正则表达式与第一个匹配

Javascript正则表达式与第一个匹配,javascript,regex,Javascript,Regex,我有一个正则表达式(它不做我想做的事情):/^.*/(eu | es)(?:\/)?([^#]*)./,它实际上是js版本的:/^.*/(eu | es)(?:/)([^#]*)。/ 好吧,它不能满足我的要求,当然可以鉴于此: http://localhost/es ->[1]=es,[2]= http://localhost/eu/bla/bla#wop ->[1]=欧盟,[2]='bla/bla' http://localhost/eu/bla/eubla ->[1]=欧盟,[2]='bl

我有一个正则表达式(它不做我想做的事情):
/^.*/(eu | es)(?:\/)?([^#]*)./
,它实际上是js版本的:
/^.*/(eu | es)(?:/)([^#]*)。/

好吧,它不能满足我的要求,当然可以鉴于此:

  • http://localhost/es ->[1]=es,[2]=
  • http://localhost/eu/bla/bla#wop ->[1]=欧盟,[2]='bla/bla'
  • http://localhost/eu/bla/eubla ->[1]=欧盟,[2]='bla'
前两个URL按照我的预期工作。第三个不是我想做的。由于“eu”稍后会出现在url上,因此它会与第二个eu而不是第一个eu进行匹配。因此,我希望它与以下内容匹配:[1]='eu',[2]='bla/eubla'

我必须怎么做


谢谢。:)

我想您想要的是第一个重复字符的非reedy重复
*
。试试这个:

/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/

唯一的区别是第一个
*
后面的问号
。如果缺少此选项,则
*
将匹配尽可能多的字符,从而导致第三个示例中出现不希望出现的行为。

将第一个
*
取消冻结

/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/
顺便说一句,你真的需要在javascript中转义
*
?这不管用吗

/^.*?\/(eu|es)(?:\/)?([^#]*).*/

上面的答案是贪婪的和非贪婪的,但是为什么还要麻烦匹配URL的开头呢?只需从以下内容开始表达:

/\/(eu|es)

并且它将与在线找到的第一个匹配。

已修复。他们本不打算出现在那里,只是我对编辑器预览感到困惑。没错,这也行得通。不管怎么说,很高兴知道不吉利的事。谢谢大家。:)