使用javascript regexp查找第一个AND最长匹配

Mic*_*sen 5 javascript regex

我有一个像以下简化示例的RegExp:

var exp = /he|hell/;
Run Code Online (Sandbox Code Playgroud)

当我在一个字符串上运行它时,它会给我第一个匹配,fx:

var str = "hello world";
var match = exp.exec(str);
// match contains ["he"];
Run Code Online (Sandbox Code Playgroud)

我想要第一个和最长的匹配,并且我的意思是按索引排序,然后是长度.

由于表达式是从一个RegExp数组合起来的,我正在寻找一种方法来找到最长的匹配,而不必重写正则表达式.

这甚至可能吗?

如果不是,我正在寻找一种方法来轻松分析表达式,并按正确的顺序排列.但我无法弄清楚,因为表达式可能会复杂得多,fx:

var exp = /h..|hel*/
Run Code Online (Sandbox Code Playgroud)

YOU*_*YOU 5

怎么样/hell|he/

  • 它并不总是像本例中那样明显。 (7认同)

Bar*_*ers 3

我所知道的所有正则表达式实现都会(尝试)从左到右匹配字符/模式,并在找到整体匹配时终止。

换句话说:如果您想确保获得最长的匹配,您需要(单独)尝试所有模式,存储所有匹配,然后从所有可能的匹配中获得最长的匹配。