gpt4 book ai didi

javascript - 为什么我们在此表达式中使用 _ str.replace(/[\W_]/g, '' ).toLowerCase();我们也可以使用/[\W]/g 但为什么我们要使用下划线呢?

转载 作者:数据小太阳 更新时间:2023-10-29 05:57:28 25 4
gpt4 key购买 nike

这是一个 javascript 问题。我在 freecodecamp 上解决回文问题。让我在这里写下完整的代码:

 function palindrome(str) {
var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase();
var reverseStr = normalizedStr.split('').reverse().join('');
return normalizedStr === reverseStr;
}

最佳答案

\W 元字符用于查找非单词字符。单词字符是 a-z、A-Z、0-9 中的一个字符,包括下划线字符。这意味着如果您使用 [\W] 而不是 [\W_]

var normalizedStr = str.replace(/[\W]/g, '').toLowerCase();

您的 normalizedStr 在替换后仍将包含下划线

因为这个挑战需要删除所有非字母数字字符(标点符号、空格和符号),它会为任何包含“_”的已处理字符串返回不需要的结果:

palindrome("_eye") -- should return true, but it will be false instead;

palindrome("0_0 (: /-\ :) 0-0") -- should return true, but will be false instead;

此外,不要将字符串转换为数组,而是在比较之前将其反转并将其转换回字符串,最好使用for循环来比较数组以获得更好的性能(尤其是如果字符串是更大):

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;
}

请记住,false 语句应该在第一 并且true 语句必须在 for 循环之外,否则会在第一次匹配后中断函数并返回不准确的结果。

基准代码片段在这里:

const stringLength = 100000;  // < < ADJUST THE STRING LENGTH HERE

const string = superString(stringLength);

console.log(`Random string length: ${string.length} symbols`);

benchMark(arraySplitReverseJoinMethod);
benchMark(forLoopComparisonMethod);

function arraySplitReverseJoinMethod(str) {
return str == str.split('').reverse().join('');
}

function forLoopComparisonMethod(str) {
let string = str.split('');

for (var i = 0; i < string.length/2; i++) {
if (string[i] !== string[string.length -1 -i]) {
return false;
}
}

return true;
}

function benchMark(func) {
const start = +new Date();

func(string);

const end = +new Date();
const total = end - start;

console.log(`${func.name}: ${total} ms`);

return `${func.name}: ${total} ms`;
}

function superString(n) {
let superString = '';

for (let i = 0; i < n; i++) {
const randomString = Math.random().toString(36).substring(2, 12);

superString = superString.concat(randomString);
}

return superString;
}

关于javascript - 为什么我们在此表达式中使用 _ str.replace(/[\W_]/g, '' ).toLowerCase();我们也可以使用/[\W]/g 但为什么我们要使用下划线呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33436807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com