2015-05-04 152 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"] 

編輯:

如果我設置拆分文本的限制。它看起來像

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 *,你可以將數組的其餘部分分開並使用*。加入('')*以提取消息。如果你有更多的格式,我們需要更多的信息。 – 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或-something是可選的,
  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

'/價格20早上好佩德羅Lobito'它沒有給出正確的結果。檢查這個。 – Developer

+0

早安@chatfun,我想你必須更新你的答案,你需要匹配的幾個例子。 –