RegExp问题-如何删除标点符号和空格?

时间:2020-06-07 18:41:19

标签: javascript regex algorithm

我正在尝试解决回文问题。回文可以包含字母和数字,但其他所有内容都必须删除。我下面的代码未返回正确的结果。

function palindrome(str) {
  const regex = /[\s]|[[:punct:]]/gi;
  //   const regex = /age/gi;

  const string = str.replace(regex, "").toLowerCase().split("");

  console.log(string);

  let aPointer = 0;
  let bPointer = string.length - 1;

  while (aPointer <= bPointer) {
    if (string[aPointer] !== string[bPointer]) {
      return false;
    }
    aPointer += 1;
    bPointer -= 1;
  }
  return true;
}

console.log(palindrome("My age is 0, 0 si ega ym."));

输出将删除空格,但不会删除标点符号。我的语法有误吗?

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

const regex = /[^a-zA-Z0-9]/gi;

这匹配所有非字母或数字的字符。您可以只添加您可能需要的任何其他排除项。

答案 1 :(得分:0)

尝试以下正则表达式:

const regex = str.replace(/(~|`|!|@|#|$|%|^|&|\*|\(|\)|{|}|\[|\]|;|:|\"|'|<|,|\.|>|\?|\/|\\|\||-|_|\+|=)/g,"");

答案 2 :(得分:0)

您的正则表达式表达式看起来异常。我从未听说过:punct:具有匹配的标点符号。

当我运行该正则表达式时,它会匹配(空格),:][]p]u]n]c]t]。 所用表达式的语法突出显示的屏幕截图(来自RegExr):

highlighted regex 这样该正则表达式将匹配空格或[:punct中的任何字符,然后匹配]

将正则表达式更改为/[^A-Za-z0-9]/gi应该可以解决您的问题。

此正则表达式将匹配A-Za-z0-9范围以外的任何内容,因此您可以将其删除。

编辑:显然,PCRE(PHP)正则表达式允许使用[:punct:]来匹配标点符号。 JavaScript中的正则表达式不使用它,而是按字面意义进行匹配。

相关问题