Javascript Regex匹配第一个匹配项

时间:2009-11-25 12:21:53

标签: javascript regex

我有这个正则表达式(不能做我想要的):/^.*\/(eu|es)(?:\/)?([^#]*).*/实际上是js版本:/^.*/(eu|es)(?:/)?([^#]*).*/

嗯,它没有做我想要的,当然它有效。 :)鉴于此URL:

  • http:// localhost / es - > [1] = es,[2] =''
  • http:// localhost / eu / bla / bla #wop - > [1] =欧盟,[2] ='bla / bla'
  • http:// localhost / eu / bla / eubla - > [1] = eu,[2] ='bla'

前两个网址按预期工作。第三个不是我想要的。由于后来在网址上找到“eu”,它与第二个eu而不是第一个eu匹配。所以我希望它符合这个:[1] ='eu',[2] ='bla / eubla'

我该怎么做?

谢谢。 :)

3 个答案:

答案 0 :(得分:9)

制作第一个* ungreedy

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

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

答案 1 :(得分:1)

我认为你想要的是第一个重复字符*的非常重复。试试这个:

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

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

答案 2 :(得分:1)

上面的答案是贪婪与非贪婪是好的,但为什么还要打扰匹配URL的开头呢?刚开始表达:

/\/(eu|es)

它将匹配在线上找到的第一个。