我正在尝试在JavaScript中创建一个简单的原型,从字符串中删除一个字符(如Python的条带)。这可能已经存在于JavaScript中了,但是我找不到它,这对我来说不仅仅是替代已经存在的东西。
function strip(chars) {
this.replace(chars,"");
}
String.prototype.strip=strip;
var wrong = "Hellow";
alert(wrong.strip("w"));
当我运行此代码时,警报显示“未定义”。我的怀疑是函数中的this.
但不确定。我在这里也做了一个小提琴:http://jsfiddle.net/jdb1991/rapxM/
由于
答案 0 :(得分:5)
您必须指定return
,以便操作的结果返回:
function strip(chars) {
return this.replace(chars,"");
}
工作演示:http://jsfiddle.net/rapxM/1/
请注意,您的代码不会删除所有字符,只删除第一次出现的。如果要删除所有字符,请使用:
function strip(chars) {
return this.split(chars).join('');
}
答案 1 :(得分:0)
如果您想要与Python的strip
具有相同的行为,则只应从字符串的开头和结尾删除字符。这是一个使用正则表达式来实现此目的的解决方案:
function strip(chars, wholeString) {
if (wholeString)
chars = "(" + chars + ")*";
else
chars = "[" + chars + "]*";
var pattern = "^" + chars + "|" + chars + "$";
return this.replace(new RegExp(pattern, "g"),"");
}
如果wholeString
设置为true
,它会将chars
视为必须一起出现的字符块(您的问题似乎要求这样做),而如果没有设置(默认值),chars
中的每个字符都将被删除(如Python中)。像这样使用它:
String.prototype.strip=strip;
var str = "ababccabcccbbab";
document.write(str.strip("ab")); // -> "ccabccc"
document.write(str.strip("ab", true)); // -> "ccabcccbb"
请注意,ab
未从str
的中间删除。在第一次通话中,a
和b
会被单独处理,因此bb
也会被删除。