gpt4 book ai didi

javascript - StartsWith 在每个单词的基础上进行匹配。被视为 AND 运算符的空间

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:36 24 4
gpt4 key购买 nike

在一个巨大的字符串列表中,我需要方便过滤。用户将键入几个字符,这些字符将用于在每个单词的基础上执行 startsWith 匹配。任何 white-space 字符都应被视为 AND 运算符。

假设,如果用户输入 Ad Ade A,它应该匹配以 AdAdeA(顺序不重要)。用户键入的每个单词都应在字符串中至少有一个 startsWith 匹配项。

例如 1.

Af Ele Ada

会匹配

"Adam likes African Elephants"
"Test Adam Africa Elephant Africa Adam"

但不匹配

Adam likes Australian Elephants (since no word starts with Af)

例如2

Ad Ade A

会匹配

"JunkCharacters Adenine Test1 Adam Test2 Abcd Test3"

但不匹配

"Adam Adam Adam" (since no word is starting with Ade)
"Adenine" (since Ade matches Adenine and there are no matches for Ad and A).

是否可以为这种匹配构造一个正则表达式?如果可能,最好使用单个正则表达式。

最佳答案

使用前瞻,您可以像这样在单个正则表达式中执行此操作:

^(?=.*\b(Ade\w*)\b)(?=.*\b(?!\1)(Ad\w*)\b)(?=.*\b(?!\1|\2)(A\w*)\b).*

RegEx Demo

构建正则表达式的代码:

函数先行​​(n){ 变种海峡=“”; 对于(i=1;i<=n;i++) str += "(?!.*\"+ i + ")"; 返回海峡;

var s = 'Ade Ad A'

c=0;
var re = new RegExp('^' + s.split(/\s+/g).map(function (m) {
return "(?=.*\\b" + lookaheads(c++) + "(" + m + "\\w*)\\b)";
}).join(''), 'g');

//=> /^(?=.*\b(Ade\w*)\b)(?=.*\b(?!.*\1)(Ad\w*)\b)(?=.*\b(?!.*\1)(?!.*\2)(A\w*)\b)/g

现在测试一下:

re.test("Adenine Adam Ball A")
true

re.test("Adenine")
false

re.test('JunkCharacters Adenine Test1 Adam Test2 Abcd Test3')
true

关于javascript - StartsWith 在每个单词的基础上进行匹配。被视为 AND 运算符的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018318/

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