JavaScript中是否有类似Python中strip函数的函数?

14

Python的strip函数用于从字符串开头和末尾移除给定的字符。如何在JavaScript中创建类似的函数?

示例:


str = "'^$   *# smart kitty &  ''^$*   '^";
newStr = str.strip(" '^$*#&");
console.log(newStr);

输出:

smart kitty

1
我知道,我可以使用类似于 str.replace(/(^\s*&)|(&\s*$)/g, '') 的东西来删除前导和尾随的 &。但是如果有多个字符,正则表达式会是什么? - jerrymouse
顺带一提,你的Python代码不应该将变量命名为str,因为这会掩盖同名类型/函数的名称。 - abarnert
你了解正则表达式中的字符类吗?为了查找任何一个$*#&的实例,而不仅仅是&的任何实例,可以使用字符类[$*#&] - abarnert
@abarnert 我写了一段 JavaScript 代码。 - jerrymouse
4个回答

20

这里介绍了lodash的trim()函数。

该函数用于从字符串中移除开头和结尾的空格或指定的字符。

_.trim('  abc  ');             //'abc'

_.trim('-_-abc-_-', '_-');     //'abc'

5

一种简单但不太有效的方法是查找字符并将其删除:

function strip(str, remove) {
  while (str.length > 0 && remove.indexOf(str.charAt(0)) != -1) {
    str = str.substr(1);
  }
  while (str.length > 0 && remove.indexOf(str.charAt(str.length - 1)) != -1) {
    str = str.substr(0, str.length - 1);
  }
  return str;
}

一种更有效但不太容易使用的方法是使用正则表达式:
str = str.replace(/(^[ '\^\$\*#&]+)|([ '\^\$\*#&]+$)/g, '')

注意:我转义了在正则表达式中具有任何特殊含义的所有字符。你需要对某些字符进行转义,但可能不是我在这里转义的所有字符,因为它们被用于集合内部。这主要是为了指出一些字符确实需要转义。

对我来说,这是一个临时解决方案。 - jerrymouse
你能解释一下为什么第一种方法不够有效吗?是因为它的代码行数更多,不够易读还是不够高效呢? - Max Carroll

3
Mozilla Developer Network String.prototype.trim()修改代码片段,你可以定义以下函数。
if (!String.prototype.strip) {
  String.prototype.strip = function (string) {
    var escaped = string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
    return this.replace(RegExp("^[" + escaped + "]+|[" + escaped + "]+$", "gm"), '');
  };
}

不必将此函数放入对象String.prototype中,这可能不明智,但它确实可以清楚地表明这样的函数与现有的String.prototype.trim()如何相比。 escaped的值与正则表达式指南中的escapeRegExp函数相同。Java编程语言有一个标准库函数专门用于此目的,但是JavaScript没有

这是一个很好的答案。但值得解释的是,原帖似乎缺少了一部分——他知道如何使用正则表达式来去除开头和结尾的&,但显然不知道如何使用字符类来去除任何[*#&]中的字符。你的答案解决了这个问题,但没有解释它与他的尝试有何不同之处。 - abarnert
OK. 修改为将要剥离的字符作为字符串参数传入。 - ajm475du

1
不完全是这样...我会使用正则表达式进行复杂的字符串操作,或者使用Slice()方法在特定位置删除字符 解释Slice()方法

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接