2015-05-04 2 views
0

Пожалуйста, см мой код JavaScript:JavaScript разделить строку

var str = "/price -a 20 tips for model"; 
var removeSlsh = str.slice(1); //output = price -a 20 tips for model 
var newStr = removeSlsh.replace(/\s+/g,' ').trim().split(' '); 
console.log(newStr); // Output = ["price", "-a", "20", "tips", "for", "model"] 

Над кодом работает нормально. Каждая строка разделяется, у которой есть пробел. Но мне нужно разделить выше строки, как

1 = price // Field name 
2 = -a  // price type -a anonymous, -m model, -p private 
3 = 20  // amount of price 
4 = tips for model //comment 

выход должен быть

["price", "-a", "20", "tips for model"] 

EDIT:

Если я установить предел разделенного текста. Похоже, что

var newStr = removeSlsh.replace(/\s+/g,' ').trim().split(' ',4); 
console.log(newStr); // Output = ["price", "-a", "20", "tips"] 

N.B - тип и комментарии не являются обязательными. строка может быть /price 20 или /price 20 tips for model или /price -a 20, но поле цены является обязательным и должно быть числовым значением. Второе поле необязательно, вы не введете какое-либо значение. Если вы введете какой-либо текст, кроме -a, -m, -p, тогда это поле подтвердится.

+0

кто-то задал подобную проблему.Вам нужно разбить их на массив и присоединиться к последним элементам, используя «" – Surely

+0

Если ваши первые 3 параметра всегда * fieldname *, * flag * и * value *, вы можете просто отделить остальную часть массива и использовать *. join ('') * на нем, чтобы извлечь сообщение. Если у вас больше форматов, нам нужна дополнительная информация. – Robin

+0

Как присоединиться к последним элементам? это динамично. Я не знаю, что идет комментарий или нет. комментарий - необязательное поле. – Developer

ответ

4

Вам не нужно разделить, но вытяжных частей, которые можно сделать с помощью регулярного выражения:

var parts = str.match(/^\/(\S+)\s+(\S+)\s+(\S+)\s*(.*)/).slice(1); 

Результат:

["price", "-a", "20", "tips for model"] 

Теперь предположим, что

  1. Строка, которую вы получаете, может быть w Ронг,
  2. вы хотите, чтобы гарантировать, что третья часть представляет собой число,
  3. параметра -a или -e или -что-то не является обязательным,
  4. последняя часть (комментарии) не является обязательным,

, то вы можете использовать это:

var m = str.match(/^\/(\S+)(\s+-\w+)?\s+(-?\d+\.?\d*)\s*(.*)/); 
if (m) { 
    // OK 
    var parts = m.slice(1); // do you really need this array ? 
    var fieldName = m[1]; // example: "price" 
    var priceType = m[2]; // example: "-a" or undefined 
    var price = +m[3]; // example: -23.41 
    va comments = m[4]; // example: "some comments" 
    ... 
} else { 
    // NOT OK 
} 

Примеры:

  • "/price -20 some comments" дает ["price", undefined, "-20", "some comments"]

  • "/price -a 33.12" дает ["price", "-a", "33.12", ""]

+0

Но тип цены не является обязательным. – Developer

+0

Откуда вы знаете точный формат str? тот, о котором он упомянул, является просто примером! Но хороший, очень понравилось регулярное выражение! – wallop

+0

Если сплит работает, мое регулярное выражение работает тоже –

0

var str = "/price -a 20 tips for model"; 
 
str = str.replace(/\//g,'').replace(/\s+/g,' '); //removes/and multiple spaces 
 
var myregexp = /(.*?) (.*?) (.*?) (.*)/mg; // the regex 
 
var match = myregexp.exec(str).slice(1); // execute the regex and slice the first match 
 
alert(match)


Выход:

["price", "-a", "20", "tips for model"] 
+0

'/ price 20 доброе утро Pedro Lobito' не дает должного результата. Проверь это. – Developer

+0

хорошее утро @chatfun, я думаю, вам нужно будет обновить, вы ответите несколькими примерами, которые вам нужно сопоставить. –

Смежные вопросы