如何从字符串中删除空格和特殊字符
How to remove spaces and special characters from string?
我有一个函数,如果一个字符是一种标点符号形式,我正在尝试编写另一个函数,该函数接受字符串并在调用第一个函数时删除空格和标点符号。我想我得到了大部分。但现在我被困住了。任何帮助,不胜感激。
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)
是错误的:首先,该函数需要一个字符串,而不是索引,它返回一个字符串,而不是一个布尔值(以便对其执行!
(。似乎您想递归调用函数,尽管这是一个选项,但您也在迭代字符串。您应该执行以下两项之一:递归或迭代。 -
您在
compress
函数中引用了尚未在此处定义的变量ch
。
因此,如果要compress
迭代方式编写,请按如下方式更改代码:
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
。这不会使您的函数出现故障,但该赋值没有任何用处:match
方法已经返回了if
条件所需的布尔值。
首先在if
中计算布尔表达式,然后以 false
和 true
的形式返回相同的值,这也不太好看。您可以通过返回计算的表达式本身来完成此操作:
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中删除多个空格的特殊字符
- 将字符串从第二个空格切成特殊字符
- 正则表达式,用于除所有空格和一个特殊字符之外的所有内容
- JavaScript/jQuery:在特殊字符和关闭html标记后插入空格
- 如何使用 JavaScript 删除字符串中除数字和空格之外的所有特殊字符
- 正则表达式转义空格和特殊字符
- 特殊字符替换为空格
- 如何在javascript中用一个特殊字符开头的单词内的空格替换下划线
- JavaScript正则表达式,用于删除特殊字符和多余空格,同时保留逗号
- 带有特殊字符和空格的Javascript Regex
- 过滤javascript中除空格以外的特殊字符
- 可以't发送包含特殊字符的密码(用空格代替)
- Javascript Regex可以删除任何空格、特殊字符和数字
- 正则表达式:在空格上拆分一个字符串 + 每个要单独包含的特殊字符
- 如何删除特殊字符,但不删除空格
- Regex仅包含数字和2个仅带空格的特殊字符
- 仅用于数字的正则表达式(没有空格或特殊字符),使用ng-pattern
- Regexp表示不允许在结束/开始处使用特殊字符,但应该允许空格
- 如何从字符串中删除空格和特殊字符
- 通过弹出窗口转义url中的空格和特殊字符