gpt4 book ai didi

javascript - 如何从字符串中删除空格和特殊字符?

转载 作者:行者123 更新时间:2023-12-03 05:40:58 24 4
gpt4 key购买 nike

我有一个函数,如果字符是标点符号的一种形式,则返回 true,并且我正在尝试编写另一个函数,该函数接受字符串并在调用第一个函数时删除空格和标点符号。我想我已经得到了大部分。但现在我被困住了。如有任何帮助,我们将不胜感激。

var isPunct = function(ch) {

if (ch = ch.match(/[,.!?;:'-]/g))
return true
else
return false
}

//B

var compress = function(s) {
var result = "";

//loop to traverse s
for (var i = 0; i < s.length; i++) {
if (!(isPunct(ch));
//(isPunct(s.charAt(i) || s.charAt(i) == " "));
//do nothing
else
result = result + !compress(i)
}

return result
}

最佳答案

一些问题:

  • 内部条件实际上应该相反:当它一个标点符号时,你不想做任何事情,即你不想添加它到结果。只有在其他情况下你才想这样做。

  • 调用 !compress(i) 是错误的:首先该函数需要一个字符串,而不是索引,并且它返回一个字符串,而不是一个 bool 值(因此执行 !就可以了)。看起来您想递归地调用您的函数,尽管这是一个选项,但您也在迭代字符串。您应该执行以下两者之一:递归或迭代。

  • 您在 compress 函数中引用了您尚 undefined variable ch

因此,如果您想以迭代方式编写压缩,请按如下方式更改代码:

var compress = function(s) {
var result = "", ch; // define ch.

//loop to traverse s
for (var i = 0; i < s.length; i++) {
ch = s[i]; // initialise ch.
if (!isPunct(ch)) result = result + ch; // only add when not punctuation
}
return result;
}

另一方面,如果您想保留对 compress 的递归调用,那么您应该取消 for 循环:

var compress = function(s) {
var result = "", ch, rest;

if (s.length == 0) return '';
result = compress(s.substr(1)); // recursive call
ch = s[0];
if (!isPunct(ch)) result = ch + result;
return result;
}

函数isPunct也发生了一件奇怪的事情:它为if表达式中的ch分配了一个 bool 值。这不会使您的函数出现故障,但该赋值没有任何作用:match 方法已经返回 if 条件所需的 bool 值。

首先计算 if 中的 bool 表达式,然后以 falsetrue 的形式返回相同的值,这也不太好看。您可以通过返回计算的表达式本身来完成此操作:

var isPunct = function(ch) {
return ch.match(/[,.!?;:'-]/g);
}

最后一点,如果您仅在 compress 中使用 isPunct 函数,则实际上并不需要它。整个逻辑只能在一个函数中执行,如下所示:

let compress = s => s.replace(/[,.!?;:'-]/g,'');
// Demo:
console.log(compress('a,b,c')); // abc

如果您希望保留 isPunct 并且不想在其他地方重复正则表达式,那么您可以像这样进行替换:

let isPunct = ch => ch.match(/[,.!?;:'-]/g);

let compress = s => Array.from(s).filter(ch => !isPunct(ch)).join('');
// Demo:
console.log(compress('a,b,c')); // abc

请注意 ES6 箭头函数和 ES5 数组方法的使用如何使代码变得非常精简。

关于javascript - 如何从字符串中删除空格和特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40534341/

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