首页 > 解决方案 > 正则表达式相关的混淆

问题描述

我想使用 javascript 中使用的正则表达式从以下字符串中提取mkghj.bmgpp.kp

avb@gh.lk mkghj.bmg ,,,,fsdsdf.fdfd pllk.kp sdfsdf.bb,,,, pp.kp

,,,, 中包含的所有内容都需要忽略。,,,, 可能有多个实例,但它们总是会在字符串中出现偶数次(不出现也是可能的)。

此外,avb@gh.lk 有一个 @ 符号,因此需要忽略它

我想我正在寻找的规则是 - 如果有一个点 (.) 向前看,向后看:-

  1. 如果点包含在 ,,, 中,则忽略它
  2. 如果点前面有一个@,点和@之间没有空格,则忽略它
  3. 在所有其他情况下,在点的任一侧捕获一组完整的字符(直到遇到空格)

我想出了这个正则表达式,但它没有帮助

[^\, ]+([^@ \,]+\w+)[^\, ]+

标签: javascriptregex

解决方案


一般来说,这是(注意捕获组):

not_this | neither_this_nor_this | (but_this_interesting_stuff)


对于您的具体示例,这可能是

,,,,.*?,,,,|\S+@\S+|(\S+)

您需要检查组 1 的存在,请参阅regex101.com 上的演示


JS这将是:

var myString = "avb@gh.lk mkghj.bmg ,,,,fsdsdf.fdfd pllk.kp sdfsdf.bb,,,, pp.kp";
var myRegexp = /,,,,.*?,,,,|\S+@\S+|(\S+)/g;
match = myRegexp.exec(myString);
while (match != null) {
    if (typeof(match[1]) != 'undefined') {
        console.log(match[1]);
    }
match = myRegexp.exec(myString);
}


推荐阅读