gpt4 book ai didi

javascript - 匹配这个字符串的正则表达式是什么?

转载 作者:行者123 更新时间:2023-11-30 07:35:48 24 4
gpt4 key购买 nike

考虑这些句子:

apple is 2kg
apple banana mango is 2kg
apple apple apple is 6kg
banana banana banana is 6kg

鉴于“苹果”、“香蕉”和“芒果”是唯一的水果,提取出现在句子开头的水果名称的正则表达式是什么?

我写了这个正则表达式(https://regex101.com/r/fY8bK1/1):

^(apple|mango|banana) is (\d+)kg$  

但这仅在句子中有单个水果时才匹配。

如何提取所有水果名称?

所有 4 个句子的预期输出应该是:

apple, 2
apple banana mango, 2
apple apple apple, 6
banana banana banana, 6

最佳答案

您可以像这样使用分组:

^((?:apple|mango|banana)(?:\s+(?:apple|mango|banana))*) is (\d+)kg$

参见 regex demo

(?:...) 是捕获 ((...)) 组中的非捕获组,以免造成困惑输出。

((?:apple|mango|banana)(?:\s+(?:apple|mango|banana))*) 组匹配:

  • (?:apple|mango|banana) - 替代列表中的任何值,用替代 | 运算符分隔。如果您打算只匹配整个单词,请将 \b 放在子模式的两端。
  • (?:\s+(?:apple|mango|banana))* 匹配 0 个或多个序列...
    • \s+ - 1 个或多个空格
    • (?:apple|mango|banana) - 任何替代方案。

片段:

var re = /^((?:apple|mango|banana)(?:\s+(?:apple|mango|banana))*) is (\d+)kg$/gm; 
var str = 'apple is 2kg\napple banana mango is 2kg\napple apple apple is 6kg\nbanana banana banana is 6kg';
var m;

while ((m = re.exec(str)) !== null) {
document.write(m[1] + "," + m[2] + "<br/>");
}

document.write("<b>appleapple is 2kg</b> matched: " +
/^((?:apple|mango|banana)(?:\s+(?:apple|mango|banana))*) is (\d+)kg$/.test("appleapple is 2kg"));

关于javascript - 匹配这个字符串的正则表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33320518/

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