我有这个字符串:
var str = "? this is a ? test ?";
现在我想得到这个:
var newstr = "this is a ? test";
如你所见,我想删除那些?
周围(在开头和结尾)那个字符串(不在字符串中间).怎么用Javascript?
这是我尝试过的:
var str = "? this is a ? test ?";
var result = str.trim("?");
document.write(result);
所以,正如你所看到它不起作用.实际上我是一名PHP开发人员,trim()
并且在PHP中运行良好.现在我想知道我是否可以trim()
在JS中使用它.
应该注意我可以使用正则表达式来做到这一点,但说实话,我讨厌这种工作的正则表达式.无论如何还有更好的解决方案吗?
编辑:正如评论中提到的那样,我需要删除?
字符串周围的两个和空格.
搜索字符掩码并返回其余部分.
此提议使用按位运算 ~
符进行检查.
~
是一个按位运算符.它非常适合使用indexOf()
,因为indexOf
如果找到索引0 ... n
则返回,如果没有-1
:value ~value boolean -1 => 0 => false 0 => -1 => true 1 => -2 => true 2 => -3 => true and so on
function trim(s, mask) {
while (~mask.indexOf(s[0])) {
s = s.slice(1);
}
while (~mask.indexOf(s[s.length - 1])) {
s = s.slice(0, -1);
}
return s;
}
console.log(trim('??? this is a ? test ?', '? '));
console.log(trim('abc this is a ? test abc', 'cba '));
一种可能的解决方案是使用递归函数来删除不需要的前导和尾随字符.这不使用正则表达式.
function ltrim(char, str) { if (str.slice(0, char.length) === char) { return ltrim(char, str.slice(char.length)); } else { return str; } } function rtrim(char, str) { if (str.slice(str.length - char.length) === char) { return rtrim(char, str.slice(0, 0 - char.length)); } else { return str; } }
当然,这只是众多可能解决方案中的一种.该函数trim
将使用ltrim
和rtrim
.
第char
一个参数和第二个需要清理的字符串的原因是为了更容易将其更改为函数式编程样式函数,如此(ES 2015):
function ltrim(char) { (str) => { } } // No need to specify str here function ltrimSpaces = ltrim(' ');