我有以下字符串:
[
'全新Precision 5530二合一移动工作站',
'15" (5530)',
'新14"灵越燃7000三边微边框',
'灵越新13"(7380)轻薄本 热卖',
'XPS新15"(9570)热卖',
'新15"灵越5000(Intel)',
'12” 二合一 (5290)'
]我需要删除每个非汉字字符(如产品线名、型号),包括括号内的字符,但我也不能替换(Intel) (可以是不在正则表达式匹配上的括号内的其他字符串)。
现在,我有以下内容:pattern = /(\w+\s+\d+|\(?\d{4}\)?|[a-z]+)/gi
这将应用于前一个数组,返回
[
["Precision 5530"],
["(5530)"],
["7000"],
["(7380)"],
["XPS", "(9570)"],
["5000", "Intel"],
["(5290)"]
]这几乎是完美的,除了"Intel“不应该存在.我似乎无法到达排除Intel的正则表达式(或者任何在()中的普通字母)
关于regex101:https://regex101.com/r/vqO0BO/2
有人能帮忙吗?
解决方案:使用答案中提供的正则表达式(同时获得括号)和一点js,我设法从我想要的文本中获取newText。
newText = text.replace(pattern, function(a, b) {
if(a === b) {
return " ";
} else {
if(a !== undefined) {
return a;
} else if(b !== undefined) {
return b;
} else { //If a and b are undefined, just replace the "undefined" with ""
return "";
}
}
}).trim();发布于 2018-11-13 17:23:40
我建议匹配括号内的内容,并匹配和捕获其余部分。一旦捕获组匹配某些文本,则可以用空格替换匹配,如果组1不匹配,则替换为整个匹配。
var strs = [
'全新Precision 5530二合一移动工作站',
'15" (5530)',
'新14"灵越燃7000三边微边框',
'灵越新13"(7380)轻薄本 热卖',
'XPS新15"(9570)热卖',
'新15"灵越5000(Intel)',
'12” 二合一 (5290)'
];
var pattern = /\([a-z]+\)|(\w+\s+\d+|\(?\d{4}\)?|[a-z]+)/gi;
for (var s of strs) {
console.log(
s.replace(pattern, function (a, b) {
return b ? " " : a;
}).trim()
);
}
Regex详细信息
\( - ([a-z]+ - 1+字母\) -a )| -或(\w+\s+\d+|\(?\d{4}\)?|[a-z]+) -第1组: 1+单词字符、1+空格和1+数字,或可选的(、4位数字和可选的),或1个或更多的ASCII字母。https://stackoverflow.com/questions/53283848
复制相似问题