我有这个正则表达式(不能做我想要的):/^.*\/(eu|es)(?:\/)?([^#]*).*/
实际上是js版本:/^.*/(eu|es)(?:/)?([^#]*).*/
嗯,它没有做我想要的,当然它有效。 :)鉴于此URL:
前两个网址按预期工作。第三个不是我想要的。由于后来在网址上找到“eu”,它与第二个eu而不是第一个eu匹配。所以我希望它符合这个:[1] ='eu',[2] ='bla / eubla'
我该怎么做?
谢谢。 :)
答案 0 :(得分:9)
制作第一个*
ungreedy
/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/
顺便说一句,你真的需要在javascript中逃避*
吗?这不会起作用吗?
/^.*?\/(eu|es)(?:\/)?([^#]*).*/
答案 1 :(得分:1)
我认为你想要的是第一个重复字符*
的非常重复。试试这个:
/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/
唯一的区别是第一个?
之后的问号*
。如果缺少此项,*
将匹配尽可能多的字符,从而导致第三个示例中出现不良行为。
答案 2 :(得分:1)
上面的答案是贪婪与非贪婪是好的,但为什么还要打扰匹配URL的开头呢?刚开始表达:
/\/(eu|es)
它将匹配在线上找到的第一个。