删除Javascript中字符串的第一个字符


505

如果第一个字符为0,我想删除字符串的第一个字符。0可以存在多个。

是否有一个简单的函数可以检查第一个字符并在第一个字符为0时将其删除?

现在,我正在尝试使用JS slice()函数,但这很尴尬。

Answers:


763

您可以使用删除字符串的第一个字符substr

var s1 = "foobar";
var s2 = s1.substr(1);
alert(s2); // shows "oobar"

要删除字符串开头的全0:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}

11
@Stephen:在这种情况下,不会有什么区别,因为charAt即使索引超过了最后一个字符的索引,它总是返回一个字符串,因此不会执行任何类型强制转换,并且算法最终是相同的。但是=====即使它没有任何作用,我还是更喜欢。;)
user113716 2011年

4
@Hejner:如果类型是相同的,因为他们总是会在这种情况下,然后=====执行完全相同的步骤(根据规范,至少),所以没有理由去期待一个比其他更好的执行。
Tim Down

2
@MiguelCoder。根据规范,步骤是相同的​​(浏览器的实现可能会有所不同)。如果您不相信我,请阅读。
Tim Down

3
@ReallyNiceCode抛开了8年前问这个问题的事实。有人说“ 0可以不止一次。” 询问者接受了我的解决方案。
遮蔽了

6
尽管仍然有效,但您应通过替换substr为来更新您的回复substring。检查MDN:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
灵魂掠夺者

186

可读性强的代码应.substring()与设置为第二个字符(1)的索引的开始一起使用(第一个字符的索引为0)。该.substring()方法的第二个参数实际上是可选的,因此您甚至不需要调用.length()...

TL; DR:从字符串中删除第一个字符:

str = str.substring(1);

是的,就是这么简单

删除一些特殊字符:

正如@Shaded建议的那样,只需在字符串的第一个字符为“不需要的”字符时循环播放即可。

var yourString = "0000test";
var unwantedCharacter = "0";
//there is really no need for === check, since we use String's charAt()
while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substr(1);
//yourString now contains "test"

.slice()vs .substring()vs.substr()

引用(更多内容请参见)String.slice和String.substring有什么区别?

他还指出,如果slice的参数为负,则它们将从结尾引用字符串。Substring和substr不会。



61

剥离所有前导0s 的最简单方法是:

var s = "00test";
s = s.replace(/^0+/, "");

0正如问题所暗示的,如果仅剥离单个前导字符,则可以使用

s = s.replace(/^0/, "");

26

您可以使用substring方法来做到这一点:

let a = "My test string";

a = a.substring(1);

console.log(a); // y test string


7
var s = "0test";
if(s.substr(0,1) == "0") {
    s = s.substr(1);
}

对于所有0s:http//jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();

是的,如果字符串中只有一个0,这将起作用。但是,如果String看起来像var s =“ 00test0”;我也需要它;那么只需要替换前两个0
Jings

1
为什么不charAt呢?为什么用括号?为什么要扩展原型?uck
Ry-

6
//---- remove first and last char of str    
str = str.substring(1,((keyw.length)-1));

//---- remove only first char    
str = str.substring(1,(keyw.length));

//---- remove only last char    
str = str.substring(0,(keyw.length));

4

String.prototype.trimStartWhile = function(predicate) {
    if (typeof predicate !== "function") {
    	return this;
    }
    let len = this.length;
    if (len === 0) {
        return this;
    }
    let s = this, i = 0;
    while (i < len && predicate(s[i])) {
    	i++;
    }
    return s.substr(i)
}

let str = "0000000000ABC",
    r = str.trimStartWhile(c => c === '0');
    
console.log(r);


3

这是一个不假定输入为string,使用substring且带有几个单元测试的示例:

var cutOutZero = function(value) {
    if (value.length && value.length > 0 && value[0] === '0') {
        return value.substring(1);
    }

    return value;
};

http://jsfiddle.net/TRU66/1/



0
var test = '0test';
test = test.replace(/0(.*)/, '$1');

2
这不能达到预期的效果,而且效率也很低。
Ry-

0

从trim()>的Java代码实现中,它删除字符串的开头和结尾或结尾的空格。这是该问题答案的替代实现。

var str = "0000one two three0000"; //TEST  
str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER

在JS上的原始实现

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}

我们不认为混淆是一个实现问题,但是,它通常归因于与环境所提供的变量不符的能力不足。在这种情况下,您的神经连接无法处理对本机js函数实现的这种改变采用作为对原始问题的答案的必要理解。
菲诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.