簡體   English   中英

使用javascript regexp查找第一個AND最長匹配

[英]Using javascript regexp to find the first AND longest match

我有一個像以下簡化示例的RegExp:

var exp = /he|hell/;

當我在一個字符串上運行它時,它會給我第一個匹配,fx:

var str = "hello world";
var match = exp.exec(str);
// match contains ["he"];

我想要第一個和最長的匹配 ,並且我的意思是按索引排序,然后是長度。

由於表達式是從一個RegExp數組合起來的,我正在尋找一種方法來找到最長的匹配,而不必重寫正則表達式。

這甚至可能嗎?

如果不是,我正在尋找一種方法來輕松分析表達式,並按正確的順序排列。 但我無法弄清楚,因為表達式可能會復雜得多,fx:

var exp = /h..|hel*/

怎么樣/hell|he/

你能行的。 它在這里解釋: http//www.regular-expressions.info/alternation.html

(總之,在搜索的第二部分用問號更改操作數順序或組。)

我所知道的所有正則表達式實現都會(嘗試)從左到右匹配字符/模式,並在找到全部匹配時終止。

換句話說:如果你想確保你獲得最長的匹配,你需要嘗試所有模式(單獨),存儲所有匹配,然后從所有可能的匹配中獲得最長的匹配。

你不能用正則表達式做“最長匹配” (或任何涉及計數,減去前瞻的事情)。

最好的辦法是找到所有匹配項,然后簡單地比較程序中的長度。

我不知道這是不是你想要的(考慮到這個問題差不多8年了......),但這是我的鹽:

(切換他為地獄將基於最大的第一次執行搜索)

var exp = /hell|he/;
var str = "hello world";
var match = exp.exec(str);

if(match)
{
  match.sort(function(a, b){return b.length - a.length;});            
  console.log(match[0]);
 }

匹配[0]將是匹配的所有字符串中最長的。

暫無
暫無

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

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