所以我正在编写一个程序来解析 twitch 聊天,我想知道是否有一种方法可以使用正则表达式将以下内容解析为所需的结果:
“f o b a r”变成“foobar”
到目前为止,我的代码是 /(?:(\w)\s){3,}/g
这在一定程度上有效,但请考虑以下情况:
“FrankerZ R I O T FrankerZ”
捕获“T”(“R I O T”
中的最后一个字母)并选择 “Z R I O T”
我想要的是弄清楚如何检测是否有一个前后有空格的字母,以及是否至少有 3 个连续(所以 "test a b test"
没有被选为ab
,只有3+时才抓包
有什么帮助吗?谢谢!
最佳答案
试试这个模式:/(?:\b\w(?:\s|$)){3,}/g
这使用单词边界元字符 \b
,因此您可以获得正确的整个单词匹配,而不是您在 FrankerZ
中看到的部分匹配。此外,\s|$
位解决最后一个字母在其后没有空格时丢失的问题,例如 R I O T
中的“T”。
例子:
var inputs = [
"R I",
"R I O T",
"FrankerZ R I O T FrankerZ",
"f o o b a r"
];
var re = /(?:\b\w(?:\s|$)){3,}/g;
inputs.forEach(function(s) {
var match = s.match(re);
if (match) {
var result = match[0].replace(/\s/g, '');
console.log('Original: ' + s);
console.log('Result: ' + result);
} else {
console.log('No match: ' + s);
}
});
演示:JSBin
编辑:更新以涵盖 3 个以上的单个字母和不匹配的示例。
关于javascript - RegExp 连续检测到多个单字母实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31689437/