我正在尝试解决回文问题。回文可以包含字母和数字,但其他所有内容都必须删除。我下面的代码未返回正确的结果。
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."));
输出将删除空格,但不会删除标点符号。我的语法有误吗?
答案 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):
这样该正则表达式将匹配空格或
[:punct
中的任何字符,然后匹配]
。
将正则表达式更改为/[^A-Za-z0-9]/gi
应该可以解决您的问题。
此正则表达式将匹配A-Z
,a-z
或0-9
范围以外的任何内容,因此您可以将其删除。
编辑:显然,PCRE(PHP)正则表达式允许使用[:punct:]
来匹配标点符号。 JavaScript中的正则表达式不使用它,而是按字面意义进行匹配。