正则表达式在JavaScript字符串中返回未定义

3

我有一小段代码,其中使用正则表达式从字符串中去掉标点、数字等。除了被去掉的字符串,我还得到了一个未定义的输出。有人能解释一下发生了什么吗?谢谢。

var regex = /[^a-zA-z\s\.]|_/gi;

function ripPunct(str) {
  if ( str.match(regex) ) {
     
          str = str.replace(regex).replace(/\s+/g, "");
  }
  
  return str;
}

console.log(ripPunct("*@£#__-=-=_+_devide-00000110490and586@multiply.edu"));

1个回答

3
你应该向第一个replace方法传递替换模式,并且在模式中使用A-Z,而不是A-z。另外,在进行替换之前检查是否匹配是没有意义的,直接使用replace即可。另外,似乎第二个链接的replace是多余的,因为第一个已经去除了空格(它包含\s)。此外,|_选项也是多余的,因为[^a-zA-Z\s.]已经匹配下划线,因为它不是此字符类别指定的符号之一。

var regex = /[^a-zA-Z\s.]/gi;

function ripPunct(str) {
  return str.replace(regex, "");
}

console.log(ripPunct("*@£#__-=-=_+_devide-00000110490and586@multiply.edu"));


谢谢,真的帮了很大的忙。点赞! - J Akhtar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接