簡體   English   中英

Javascript Regex匹配第一個匹配項

[英]Javascript Regex Match the first the occurrence

我有這個正則表達式(它沒有做我想要的): /^.*\\/(eu|es)(?:\\/)?([^#]*).*/其實就是js版本of: /^.*/(eu|es)(?:/)?([^#]*).*/ (?:/)?([ /^.*/(eu|es)(?:/)?([^#]*).*/

嗯,它沒有做我想要的,當然它的工作原理。 :)鑒於此URL:

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

前兩個網址按預期工作。 第三個不是我想要的。 由於后來在網址上找到“eu”,它與第二個eu而不是第一個eu匹配。 所以我希望它符合這個:[1] ='eu',[2] ='bla / eubla'

我該怎么辦?

謝謝。 :)

制作第一個* ungreedy

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

順便說一句,你真的需要在JavaScript中逃避*嗎? 這不行嗎?

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

我想你想要的是對第一個重復角色的不重復的重復* 試試這個:

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

唯一的區別是問號? 在第一個* 如果缺少這個, *將匹配盡可能多的字符,從而導致第三個示例中的不良行為。

上面的答案是貪婪與非貪婪是好的,但為什么還要打擾匹配URL的開頭呢? 剛開始表達:

/\/(eu|es)

它將匹配在線上找到的第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM