gpt4 book ai didi

javascript - 正则表达式排除不符合由分隔符分隔的两个模式之一的匹配项

转载 作者:行者123 更新时间:2023-12-02 22:09:25 25 4
gpt4 key购买 nike

在 Javascript 中使用 string.match():

我有一个字符串,例如:foo_2:asc,foo2:desc,foo3,foo4:wrong

匹配项应类似于["foo_2:asc", "foo2:desc", "foo3"]

但到目前为止我能得到的最好结果是返回 ["foo_2:asc", "foo2:desc", "foo3", "wrong"]

我当前用于上述错误匹配的正则表达式是:/([a-z0-9_]+?[:asc|:desc]*?)(?=,|$)/地理标志

我还需要一个返回相反结果的正则表达式,即查找与 thing_1:ascthing_1:desc 的模式规则不匹配的分隔符之间的所有模式的匹配项thing_1 即这将用于验证字符串,而另一个将用于收集值(即而不是手动拆分字符串)。因此,原始结果将是 ["foo4:wrong"] 作为该字符串不符合模式的部分。

最佳答案

假设唯一有效的形式是后跟 :asc 之一的单词, :desc或者什么都不做,你可以通过分割字符串来完成你想要的操作,首先在 , 上然后:并检查最后一次分割是否有两个值,并且第二个值不是 asc 之一或desc :

const str = 'foo_2:asc,foo2:desc,foo3,foo4:wrong';
const errs = str.split(',').filter(v => v.split(':').length == 2 && ['asc', 'desc'].indexOf(v.split(':')[1]) == -1);
console.log(errs);

如果必须使用正则表达式,可以在 , 上进行拆分然后根据不匹配 ^\w+(:(asc|desc))$ 的值进行过滤:

const str = 'foo_2:asc,foo2:desc,foo3,foo4:wrong';
const errs = str.split(',').filter(v => !v.match(/^\w+(:(?:asc|desc))?$/));
console.log(errs);

如果保证字符串的格式为 \w+(:\w+)?(,\w+(:\w+)?)*你可以简化为:

const str = 'foo_2:asc,foo2:desc,foo3,foo4:wrong';

const errs = str.match(/\w+:(?!(?:asc|desc)\b)\w+/g);
console.log(errs);

关于javascript - 正则表达式排除不符合由分隔符分隔的两个模式之一的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59606156/

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