Javascript 为什么在这个表达式str.replace(/[\W\u]/g,';';&)中使用uu;我们也可以使用/[\W]/g,但为什么要使用下划线?
这是一个javascript问题。我在freecodecamp上解决回文问题。让我在这里编写完整的代码:Javascript 为什么在这个表达式str.replace(/[\W\u]/g,';';&)中使用uu;我们也可以使用/[\W]/g,但为什么要使用下划线?,javascript,algorithm,Javascript,Algorithm,这是一个javascript问题。我在freecodecamp上解决回文问题。让我在这里编写完整的代码: function palindrome(str) { var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase(); var reverseStr = normalizedStr.split('').reverse().join(''); return normalizedStr === reverseStr; } \W
function palindrome(str) {
var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase();
var reverseStr = normalizedStr.split('').reverse().join('');
return normalizedStr === reverseStr;
}
\W
匹配任何非单词字符[^a-zA-Z0-9\
\uu
文字字符\u
因此,这个正则表达式将只在字符串中保留字母和数字,\W元字符用于查找非单词字符。单词字符是来自A-z、A-z、0-9、的字符,包括下划线。这意味着如果您使用[\W]而不是[\W\u]
var normalizedStr = str.replace(/[\W]/g, '').toLowerCase();
替换后,normalizedStr仍将包含下划线
由于此挑战要求删除所有非字母数字字符(标点符号、空格和符号),因此它将为任何处理过的字符串返回不需要的结果,这些字符串包括“\u1”:
回文(“_eye”)——应该返回true,但它将是false
回文(“0_0(:/-\:)0-0”)——应该返回true,但将改为false
此外,与其将字符串转换为数组,不如在比较之前将其反转并转换回字符串,最好使用for循环来比较数组,以获得更好的性能(尤其是当字符串更大时):
函数回文(str){
var clearString=str.toLowerCase().replace(/[^0-9a-z]/gi')。split(“”);
对于(变量i=0;i
请记住,false语句应该是第一个,而true语句必须在for循环之外,否则它将在第一次匹配后中断函数并返回不准确的结果
这里是基准代码片段:
const stringLength=100000;//<<在此调整字符串长度
常量字符串=超弦(字符串长度);
log(`Random string length:${string.length}符号`);
基准(ArraySplitreversejoin方法);
基准(forLoopComparisonMethod);
函数阵列PLITREVERSEJOINE方法(str){
return str==str.split(“”).reverse().join(“”);
}
循环比较方法(str)的函数{
让string=str.split(“”);
对于(变量i=0;i }
“所以这个正则表达式只在字符串中保留字母和数字”和“\u”这个字符,并且\W对“\u”进行了否定,所以我们必须添加这个明确的语句。我知道了很多。你确定性能方面吗?我只是做了一个面试前的准备,并用你演示的for循环解决了这个问题,但帖子中的答案也指向了数组拆分反向连接方法。@CodeAt30,我完全肯定这一点:)你为什么不自己用更大的字符串来测试它呢?这里有一个演示:哈!在我的机器上快20倍!网络测验到此为止!为了我们信任的循环!
function palindrome(str) {
var clearString = str.toLowerCase().replace(/[^0-9a-z]/gi, '').split('');
for (var i = 0; i < clearString.length/2; i++) {
if (clearString[i] !== clearString[clearString.length -1 -i]) {
return false;
}
}
return true;
}