gpt4 book ai didi

javascript - 正则表达式捕获连续的单词

转载 作者:行者123 更新时间:2023-11-30 10:01:35 25 4
gpt4 key购买 nike

我有一个移动设备名称列表,例如

"Sony Xperia Z1 Compact"
"Samsung Galaxy Trend Plus"
"Samsung Galaxy Tab 2"

我需要一个正则表达式来从这些字符串中创建标签,以这种方式匹配连续的单词(预期结果):

["Sony", "Sony Xperia", "Sony Xperia Z1", "Sony Xperia Z1 Compact"]

我已经尝试过一些具有积极前瞻性的东西:

/(?=([a-z]+\s+[a-z]+))[a-z]+/i

我得到:

model = "Samsung Galaxy Trend Plus"
"Samsung Galaxy Trend Plus"
model.match(/(?=([a-z]+\s+[a-z]+))[a-z]+/i)
["Samsung", "Samsung Galaxy"]

但是当你有一个词时这不起作用,所以,在添加一个可选组之后:

/(?=([a-z]+\s+[a-z]+))|[a-z]+/i

我得到:

model = "Samsung"
"Samsung"
model.match(/(?=([a-z]+\s+[a-z]+))|[a-z]+/i)
["Samsung", undefined]

因此,尝试概括:

/(?=([a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+\s+[a-z]+))[a-z]+/i

我明白了

"Samsung Galaxy Trend Plus"
model.match(/(?=([a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+\s+[a-z]+))[a-z]+/i)

["Samsung", "Samsung Galaxy", "Samsung Galaxy Trend", "Samsung Galaxy Trend Plus"]

假设最多有 N 个词,如何使这个正则表达式通用(N 个词变量的自由度)?另外,如何摆脱 undefined ?正如解释的那样 here我应该使用非捕获组,因此这会阻止我以我的方式捕获连续的单词。

最佳答案

对于那些有类似问题但不想(ab)使用正则表达式的人:

name = "Samsung Galaxy Trend Plus";

result = name.split(/\s+/g).map(function(_, i, a) {
return a.slice(0, i + 1).join(" ")
});

document.write(result);

关于javascript - 正则表达式捕获连续的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341836/

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