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'
谢谢。:) 我想您想要的是第一个重复字符的非reedy重复
*
。试试这个:
/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/
唯一的区别是第一个
*
后面的问号?
。如果缺少此选项,则*
将匹配尽可能多的字符,从而导致第三个示例中出现不希望出现的行为。将第一个*
取消冻结
/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/
顺便说一句,你真的需要在javascript中转义*
?这不管用吗
/^.*?\/(eu|es)(?:\/)?([^#]*).*/
上面的答案是贪婪的和非贪婪的,但是为什么还要麻烦匹配URL的开头呢?只需从以下内容开始表达:
/\/(eu|es)
并且它将与在线找到的第一个匹配。已修复。他们本不打算出现在那里,只是我对编辑器预览感到困惑。没错,这也行得通。不管怎么说,很高兴知道不吉利的事。谢谢大家。:)