gpt4 book ai didi

javascript - 使用正则表达式在 JavaScript 中查找最长的重复子字符串

转载 作者:搜寻专家 更新时间:2023-11-01 04:11:39 26 4
gpt4 key购买 nike

我想在一个字符串中找到最长的重复字符串,用 JavaScript 实现并使用基于正则表达式的方法。

我有一个 PHP 实现,当直接移植到 JavaScript 时,它不起作用。

PHP 实现取自对问题 "Find longest repeating strings?" 的回答。 :

preg_match_all('/(?=((.+)(?:.*?\2)+))/s', $input, $matches, PREG_SET_ORDER);

这将用在 $input 中找到的最长重复子串。我用许多输入字符串对此进行了测试,并确信输出是正确的。

JavaScript 中最近的直接端口是:

var matches = /(?=((.+)(?:.*?\2)+))/.exec(input);

这不会给出正确的结果

input                  Excepted result   matches[0][X]======================================================inputinput             input             input7inputinput            input             inputinputinput7            input             input7inputinput7           input             7XXinputinputYY         input             XX

我对正则表达式不够熟悉,无法理解这里使用的正则表达式是做什么的。

我当然可以实现一些算法来找到最长的重复子串。在尝试这样做之前,我希望不同的正则表达式能够在 JavaScript 中产生正确的结果。

是否可以修改上述正则表达式,以便在 JavaScript 中返回预期的输出?我承认这在单行中可能是不可能的。

最佳答案

Javascript 匹配仅返回第一个匹配项——您必须循环才能找到多个结果。一点测试表明这得到了预期的结果:

function maxRepeat(input) {
var reg = /(?=((.+)(?:.*?\2)+))/g;
var sub = ""; //somewhere to stick temp results
var maxstr = ""; // our maximum length repeated string
reg.lastIndex = 0; // because reg previously existed, we may need to reset this
sub = reg.exec(input); // find the first repeated string
while (!(sub == null)){
if ((!(sub == null)) && (sub[2].length > maxstr.length)){
maxstr = sub[2];
}
sub = reg.exec(input);
reg.lastIndex++; // start searching from the next position
}
return maxstr;
}

// I'm logging to console for convenience
console.log(maxRepeat("aabcd")); //aa
console.log(maxRepeat("inputinput")); //input
console.log(maxRepeat("7inputinput")); //input
console.log(maxRepeat("inputinput7")); //input
console.log(maxRepeat("7inputinput7")); //input
console.log(maxRepeat("xxabcdyy")); //x
console.log(maxRepeat("XXinputinputYY")); //input

请注意,对于“xxabcdyy”,您只会返回“x”,因为它会返回最大长度的第一个字符串。

关于javascript - 使用正则表达式在 JavaScript 中查找最长的重复子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com