我有一个大字符串(1000个单词),我想与数组的所有元素进行比较,该数组也包含大字符串,所有3个或更多连续的单词匹配。我已经用正则表达式实现了它,但得到的是空的匹配数组。
小文本示例:
let textToCompare = "Hello there how are you doing with your life";
let textsToCompareWith= [
{ id:1, text:"Hope you are doing good with your life" },
{ id:2, text:"what are you doing with your life. hello there how are you" },
{ id:3, text:"hello there mate" }
];
预期产出:
[
{id:1, matchedText:["with your life"]},
{id:2, matchedText:["are you doing with your life","hello there how are you"]},
{id:3, matchedText:[]}
];
当前输出:
[
{id:1, matchedText:[]},
{id:2, matchedText:[]},
{id:3, matchedText:[]}
];
我的代码:
let regex = new RegExp("\\b" + textToCompare.split(" ").join("\\b.*\\b") + "\\b", "gi");
let output = textsToCompareWith.map(textObj => {
// Match against each element in the array
let matchedText = textObj?.text.match(regex);
console.log(matchedText);
return {
id: textObj.id,
matchedText: matchedText ? matchedText : [] // Return an empty array if no match is found
};
});
console.log(output);
2条答案
按热度按时间q7solyqu1#
我为自己学习JavaScript创造了一个答案。拼凑起来,我得出了:
我很确定这段代码会有很多缺陷,看起来会很笨重,但我的想法是将你的输入拆分成3个以上的单词,这是基于它可以被空格拆分的假设。然后我试着根据长度对结果数组进行排序,这样我们就不会先找到更小的子字符串。
谁知道呢也许这里面有些东西真的有用
gfttwv5a2#
你可以互相检查每个单词,并留意最后一个单词。
另一个稍微不同的方法是避免使用单词。
一个二个一个一个