我想知道如何从字符串中提取单词(子串),如果所述字符串在两个特定字符之间。在我的情况下,我正在寻找一个白色空间的起始角色,最后一个角色是这样的逗号:
var str = "Hit that thing man! and a one, two, three, four, five, six, seven or eight";
结果:
var result = ["one", "two", "three", "four", "five", "six", "seven", "eight"];
我想知道正则表达式是否可行,或者好的旧javascript将是直接的解决方案。
到目前为止,我已尝试过以下内容:
var result = str.split(/[,\s]+/);
但无济于事,因为它不正确地执行以下行为:
one
之前抓取整个字符串。 奖金回合:我可以通过添加到所需的正则表达式/ javascript解决方案,在结果中包含最后一个字母eight
吗?
非常感谢任何帮助!
答案 0 :(得分:2)
TLDR:regex101.com
为什么不只是get all matches?这似乎比分割东西简单。
var re = /(?:^|\s)([^,\s]+)(?:,|$| or)/g,
s = "Hit that thing man! and a one, two, three, four, five, six, seven or eight",
m,
matches = [];
// Matches once and then as long as there are some matches
do {
m = re.exec(s);
if (m) {
matches.push(m[1]);
}
} while (m);
console.log(m);
这会产生:
["one", "two", "three", "four", "five", "six", "seven", "eight"]
如果不希望在or
上匹配,请将其删除:
/(?:^|[\s])([^,\s]+)(?:,|$)/g
您还可以添加经常出现的and
代替或列在此类列表中:
/(?:^|[\s])([^,\s]+)(?:,|$| and| or|)/g
^
和$
允许在字符串的开头和结尾匹配。
答案 1 :(得分:1)
答案 2 :(得分:1)
最终的or
是唯一的实际问题,因为JavaScript不支持lookbehinds。出于这个原因,你不能使用单个正则表达式来捕获“两个特定字符之间”的单词 - 你的结果中至少会得到左边的单词。
我想出了这个:通过用逗号替换or
并在末尾添加一个来将字符串变为形式。那么这是一个简单的正则表达式:
var result = str.concat(',').replace(' or ',',').match(/\w+(?=,)/g);
它无法与split
一起使用,因为这会将句子的整个第一部分分配给one
。