正则表达式获取除括号内的所有非特殊词

时间:2018-11-13 15:01:54

标签: javascript regex

我有以下字符串:

[
    '全新Precision 5530二合一移动工作站',
    '15" (5530)',
    '新14"灵越燃7000三边微边框',
    '灵越新13"(7380)轻薄本 热卖',
    'XPS新15"(9570)热卖',
    '新15"灵越5000(Intel)',
    '12” 二合一 (5290)'
]

我需要消除所有非中文字符(例如产品线名称,型号),包括括号内的字符,但是我也不能替换(英特尔)(可以是括号内的其他字符串,但不能参加正则表达式比赛)

现在,我有以下内容:pattern = /(\w+\s+\d+|\(?\d{4}\)?|[a-z]+)/gi

应用于上一个数组的this返回

[
     ["Precision 5530"],
     ["(5530)"],
     ["7000"],
     ["(7380)"],
     ["XPS", "(9570)"],
     ["5000", "Intel"],
     ["(5290)"]
]

这几乎是完美的,除了“英特尔”不应该在那儿。我似乎无法使用排除英特尔(或()中常见字母的任何东西)的正则表达式

在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();

1 个答案:

答案 0 :(得分:1)

我建议匹配括号内的内容,并匹配并捕获其余内容。捕获组匹配某些文本后,可以用空格替换匹配项,如果第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()
  );
}

正则表达式详细信息

  • \(-(
  • [a-z]+-1个以上字母
  • \)-一个)
  • |-或
  • (\w+\s+\d+|\(?\d{4}\)?|[a-z]+)-第1组:1个以上的字符字符,1个以上的空格和1个以上的数字,或可选的(,4个数字和可选的)或1个或多个ASCII字母。