Видаліть провідну кому з рядка


187

У мене є такий рядок:

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

Я хочу перетворити це в масив, але, очевидно, це не вірно через першу кому. Як я можу видалити першу кому зі свого рядка і зробити її дійсною масивом?

Я хотів би закінчити щось подібне:

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

43
Просто використовуйтеmyString.slice(1);
NBK

2
@NikhilBenKuruvilla це видалить будь-який символ, навіть якщо це не кома. Ось перше видалення лише символів комами stackoverflow.com/a/39047793/696535
Pawel


Павель, що було б виразом для видалення першого крапки з комою, незалежно від того, де він знаходиться з початку рядка? Я повинен використовувати це: функція removeFirstSemicolon (str) {str = str.trim (); str = str.replace (/ ^; /, ''); повернути str; } Це може бути корисніше - перед символом і після нього часто є пробіл, тому дійсно мені доведеться використовувати обрізку двічі.
користувач1585204

Відповіді:


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
Це краща відповідь і повинна бути прийнятою відповіддю.
Крістофер Сміт

Не потрібно запускати підрядку двічі, щоб перевірити перший символ: if (str[0] === ',')лише для того, щоб зробити його трохи більш ефективним.
Крут

11

Однолінійний

str = str.replace(/^,/, '');

Я повернусь.


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

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

Це припущення, що рядок, з якого ви починаєте, насправді є String, як ви сказали, а не масив рядків.


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, '');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.