gpt4 book ai didi

javascript - 测试要匹配的特定数量的单词,使用 Js 中的正则表达式的已知分隔符

转载 作者:行者123 更新时间:2023-11-30 20:32:56 25 4
gpt4 key购买 nike

我正在尝试检查一个字符串是否与一组值匹配并且它们由 ; 分隔它需要有;作为分隔符。我去这个 new RegExp(/\b(Segunda|Terça|Quarta|Quinta|Sexta|Sábado|Domingo)\b/, 'gi').test(str)

如果我通过了:

  • 'Segunda;Terça',正确。

  • 'Segundaaa',错误。

  • 'Segunda;Terçaa',是真的.. 为什么是真的?我怎样才能避免这种情况?

提前致谢。

[编辑]代码:

const WEEK_DAYS_GROUP_REGEX = /\b(Segunda|Terça|Quarta|Quinta|Sexta|Sábado|Domingo)\b/;

const res = new RegExp(WEEK_DAYS_GROUP_REGEX, 'i').test('Segunda;Terçaa');

console.log(res) // gives true

最佳答案

带有 gi 修饰符的 /\b(Segunda|Terça|Quarta|Quinta|Sexta|Sábado|Domingo)\b/ 模式匹配任何备选方案作为整个单词,它不能保证整个字符串仅由这些值组成,更不用说 ; 分隔符了。

你可以使用

^(<ALTERNATIONS>)(?:;(<ALTERNATIONS>))*$

参见 pattern demo .

在 JS 中,你不需要使用那么长的模式,你可以动态构建模式:

const strs = ["Segunda;Terça", "Segundaaa", "Segunda;Terçaa"];
const vals = "Segunda|Terça|Quarta|Quinta|Sexta|Sábado|Domingo";
let rx = new RegExp("^(?:" + vals + ")(?:;(?:" + vals + "))*$", "i");
console.log(rx);
for (let s of strs) {
console.log(s,"=>",rx.test(s));
}

请注意,当不需要提取子匹配项、组值时,首选非捕获组 (?:...)

关于javascript - 测试要匹配的特定数量的单词,使用 Js 中的正则表达式的已知分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144212/

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