ลบเครื่องหมายจุลภาคนำออกจากสตริง


187

ฉันมีสตริงต่อไปนี้:

",'first string','more','even more'"

ฉันต้องการแปลงให้เป็น Array แต่เห็นได้ชัดว่านี่ไม่ถูกต้องเนื่องจากเครื่องหมายจุลภาคแรก ฉันจะลบเครื่องหมายจุลภาคแรกออกจากสตริงของฉันและทำให้เป็น Array ที่ถูกต้องได้อย่างไร

ฉันต้องการที่จะจบลงด้วยสิ่งนี้:

myArray  = ['first string','more','even more']

43
ใช้ง่ายmyString.slice(1);
NBK

2
@NikhilBenKuruvilla สิ่งนี้จะลบอักขระใด ๆ แม้ว่าจะไม่ใช่เครื่องหมายจุลภาค นี่คือการกำจัดstackoverflow.com/a/39047793/696535
Pawel

ซ้ำซ้อนที่เป็นไปได้ของการลบตัวอักษรตัวแรกของสตริงใน Javascript
Durgpal Singh

Pawel การแสดงออกที่จะลบเครื่องหมายอัฒภาคแรกไม่ว่ามันจะมาจากจุดเริ่มต้นของสตริงคืออะไร? ฉันต้องใช้สิ่งนี้: function removeFirstSemicolon (str) {str = str.trim (); str = str.replace (/ ^; /, ''); คืน str; } นั่นอาจจะเป็นประโยชน์มากกว่า - มักจะมีพื้นที่สีขาวก่อนและหลังตัวละครดังนั้นฉันต้องใช้เล็มสองครั้ง
user1585204

คำตอบ:


312

หากต้องการลบอักขระแรกที่คุณจะใช้:

var myOriginalString = ",'first string','more','even more'"; 
var myString = myOriginalString.substring(1);

ฉันไม่แน่ใจว่าสิ่งนี้จะเป็นผลลัพธ์ที่คุณต้องการเพราะคุณจะต้องแยกมันออกเพื่อสร้างอาร์เรย์ด้วย อาจจะชอบ:

var myString = myOriginalString.substring(1);
var myArray = myString.split(',');

โปรดทราบว่าอักขระ 'จะเป็นส่วนหนึ่งของแต่ละสตริงในการแยกที่นี่


94

ในกรณีเฉพาะนี้ (มีตัวอักษรเดียวเสมอเมื่อคุณต้องการลบ) คุณจะต้อง:

str.substring(1)

อย่างไรก็ตามหากคุณต้องการตรวจสอบว่ามีเครื่องหมายจุลภาคอยู่หรือไม่และลบออกถ้าเป็นเช่นนั้นแล้วจะมีลักษณะดังนี้:

if (str[0] == ',') { 
  str = str.substring(1);
}

3
+1 สำหรับเงื่อนไขเช่นกัน มันจะดีกว่าเสมอที่จะใช้เครื่องหมายคอมม่า
JoeMoe1984

1
นี่เป็นคำตอบที่ดีกว่าและควรเป็นคำตอบที่ยอมรับได้
Christopher Smit

ไม่จำเป็นต้องเรียกใช้ซับสตริงสองครั้งเพื่อตรวจสอบอักขระตัวแรก: if (str[0] === ',')เพียงเพื่อให้มีประสิทธิภาพมากขึ้นเล็กน้อย
Croot


9
var s = ",'first string','more','even more'";

var array = s.split(',').slice(1);

นั่นคือสมมติว่าสตริงที่คุณเริ่มต้นนั้นแท้จริงแล้วเป็นสตริงเช่นเดียวกับที่คุณพูดและไม่ใช่อาร์เรย์ของสตริง


4

สมมติว่าสตริงเรียกว่า myStr:

// Strip start and end quotation mark and possible initial comma
myStr=myStr.replace(/^,?'/,'').replace(/'$/,'');

// Split stripping quotations
myArray=myStr.split("','");

โปรดทราบว่าหากสตริงสามารถหายไปในรายการโดยไม่ต้องมีเครื่องหมายคำพูดอยู่และคุณต้องการจุดว่างในตำแหน่งที่สอดคล้องกันในอาเรย์คุณจะต้องเขียนการแยกด้วยตนเองสำหรับโซลูชั่นที่มีประสิทธิภาพ


4
var s = ",'first string','more','even more'";  
s.split(/'?,'?/).filter(function(v) { return v; });

ผลลัพธ์ใน:

["first string", "more", "even more'"]

การแบ่งครั้งแรกด้วยเครื่องหมายจุลภาคอาจล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยว
แล้วกรองส่วนที่ไม่ใช่ความจริง (ว่าง) ออก


3

เพื่อเปลี่ยนสตริงเป็นอาร์เรย์ฉันมักจะใช้ split()

> var s = ",'first string','more','even more'"
> s.split("','")
[",'first string", "more", "even more'"]

นี่คือสิ่งที่คุณต้องการ ตอนนี้คุณแค่ต้องตัดอักขระสองตัวแรกและตัวอักขระสุดท้าย

> s.slice(2, s.length-1)
"first string','more','even more"

> s.slice(2, s.length-2).split("','");
["first string", "more", "even more"]

เพื่อแยกสตริงย่อยจากสตริงฉันมักจะใช้slice()แต่substr()และsubstring()ยังทำงาน


1

คุณสามารถใช้แทนที่ฟังก์ชั่นโดยตรงบน javascript ด้วย regex หรือกำหนดฟังก์ชั่นช่วยเหลือเช่นใน php ltrim (ซ้าย) และ rtrim (ขวา):

1) ด้วยการแทนที่:

var myArray = ",'first string','more','even more'".replace(/^\s+/, '').split(/'?,?'/);

2) ฟังก์ชั่นช่วยเหลือ:

if (!String.prototype.ltrim) String.prototype.ltrim = function() {
    return this.replace(/^\s+/, '');
};
if (!String.prototype.rtrim) String.prototype.rtrim = function() {
    return this.replace(/\s+$/, '');
};
var myArray = ",'first string','more','even more'".ltrim().split(/'?,?'/).filter(function(el) {return el.length != 0});;

คุณสามารถทำและสิ่งอื่น ๆ เพื่อเพิ่มพารามิเตอร์ให้กับฟังก์ชั่นช่วยเหลือด้วยสิ่งที่คุณต้องการแทนที่ถ่าน ฯลฯ



0

สิ่งนี้จะลบเครื่องหมายจุลภาคและช่องว่างต่อท้าย

var str = ",'first string','more','even more'";
var trim = str.replace(/(^\s*,)|(,\s*$)/g, '');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.