ฉันต้องการลบอักขระตัวแรกของสตริงถ้าอักขระตัวแรกคือ 0 0 สามารถมีได้มากกว่าหนึ่งครั้ง
มีฟังก์ชั่นง่าย ๆ ที่ตรวจสอบตัวอักษรตัวแรกและลบมันถ้าเป็น 0 หรือไม่?
ตอนนี้ฉันลองใช้slice()
งานฟังก์ชั่นJS แต่มันค่อนข้างอึดอัดมาก
ฉันต้องการลบอักขระตัวแรกของสตริงถ้าอักขระตัวแรกคือ 0 0 สามารถมีได้มากกว่าหนึ่งครั้ง
มีฟังก์ชั่นง่าย ๆ ที่ตรวจสอบตัวอักษรตัวแรกและลบมันถ้าเป็น 0 หรือไม่?
ตอนนี้ฉันลองใช้slice()
งานฟังก์ชั่นJS แต่มันค่อนข้างอึดอัดมาก
คำตอบ:
คุณสามารถลบอักขระตัวแรกของสตริงโดยใช้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);
}
===
และ==
ดำเนินการขั้นตอนเดียวกันอย่างแม่นยำ (ตามสเป็คอย่างน้อย) ดังนั้นจึงไม่มีเหตุผลที่จะคาดหวังว่าคนใดคนหนึ่งจะทำงานได้ดีกว่าคนอื่น .
substr
substring
ตรวจสอบ MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
รหัสที่อ่านง่ายมากคือการใช้.substring()
กับชุดเริ่มต้นเป็นดัชนีของอักขระที่สอง (1) (อักขระแรกมีดัชนี 0) พารามิเตอร์ที่สองของ.substring()
วิธีนี้เป็นทางเลือกดังนั้นคุณไม่จำเป็นต้องโทร.length()
...
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()
เทียบ.substring()
กับ.substr()
อ้างจาก (และอื่น ๆ ในนั้น) ความแตกต่างระหว่าง String.slice และ String.substring คืออะไร?
นอกจากนี้เขายังชี้ให้เห็นว่าหากพารามิเตอร์ของชิ้นเป็นลบพวกเขาอ้างอิงสตริงจากท้ายที่สุด สตริงย่อยและสตริงย่อยไม่
ตัวอย่าง: http://jsfiddle.net/kCpNQ/
var myString = "0String";
if( myString.charAt( 0 ) === '0' )
myString = myString.slice( 1 );
ถ้าอาจจะมีหลาย0
ตัวละครที่จุดเริ่มต้นคุณสามารถเปลี่ยนไปif()
while()
ตัวอย่าง: http://jsfiddle.net/kCpNQ/1/
var myString = "0000String";
while( myString.charAt( 0 ) === '0' )
myString = myString.slice( 1 );
วิธีที่ง่ายที่สุดในการตัดส่วนนำทั้งหมด0
คือ:
var s = "00test";
s = s.replace(/^0+/, "");
หากคุณลอก0
ตัวละครนำเพียงตัวเดียวตามที่บอกเป็นนัยคุณสามารถใช้
s = s.replace(/^0/, "");
คุณสามารถทำได้ด้วยเมธอดย่อย :
let a = "My test string";
a = a.substring(1);
console.log(a); // y test string
คุณลองใช้substring
ฟังก์ชั่นนี้หรือไม่?
string = string.indexOf(0) == '0' ? string.substring(1) : string;
นี่คือข้อมูลอ้างอิง - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring
และคุณสามารถทำเช่นนี้ได้หลาย ๆ 0:
while(string.indexOf(0) == '0')
{
string = string.substring(1);
}
var s = "0test";
if(s.substr(0,1) == "0") {
s = s.substr(1);
}
สำหรับทุกคน0
: http://jsfiddle.net/An4MY/
String.prototype.ltrim0 = function() {
return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
charAt
ล่ะ ทำไมต้องเลือกวงเล็บ? ทำไมต้องเป็นส่วนขยายต้นแบบ yuck
//---- 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));
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);
นี่คือสิ่งที่ไม่ถือว่าอินพุตเป็นstring
, ใช้substring
, และมาพร้อมกับการทดสอบสองหน่วย:
var cutOutZero = function(value) {
if (value.length && value.length > 0 && value[0] === '0') {
return value.substring(1);
}
return value;
};
var test = '0test';
test = test.replace(/0(.*)/, '$1');
จากการนำ Javascript ไปใช้งาน trim ()> ที่ลบและนำหน้าหรือสิ้นสุดช่องว่างออกจากสตริง นี่คือการใช้คำตอบสำหรับคำถามนี้ที่เปลี่ยนแปลงไป
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,'');
}
}
charAt
จะส่งกลับสตริงเสมอแม้ว่าดัชนีจะเกินดัชนีของอักขระตัวสุดท้ายดังนั้นจึงไม่มีการบังคับประเภทและอัลกอริทึมก็สิ้นสุดลง แต่ฉันชอบ===
มากกว่า==
แม้ว่าจะไม่ได้สร้างความแตกต่าง ;)