2012-08-12 73 views
0

我有這個字符串:'foo = bar; this = is; not = necessary'如何從字符串中獲取兩個變量?

我希望得到這樣的結果:{"name" : "foo", "value" : "bar"}

這是沒有必要的,什麼是後;

我知道,我應該使用一些正則表達式,但我真的不明白正則表達式的工作原理。

謝謝你是進步,

+0

名稱/值對總是會先出現嗎?會不會有一致的名字? – 2012-08-12 15:12:46

+0

字符串從哪裏來?如果它使用的是URL查詢字符串格式(例如'foo = bar&this = is&not = necessary'),則會更方便。然後你會用相應的函數解析它。 – 2012-08-12 15:14:48

回答

3

你可以使用:

var values='foo = bar; this = is; not = necessary'.split('; ')[0].split(' = '); 
var obj={"name" : values[0], "value" : values[1]} 

這樣,你做的事:

  1. 'foo = bar; this = is; not = necessary'.split('; '),它返回['foo = bar','this = is','not = necessary']
  2. 你想僅僅是第一要素,所以'foo = bar; this = is; not = necessary'.split(';')[0]給出'foo = bar'
  3. 然後你再次分裂:'foo = bar; this = is; not = necessary'.split(';')[0].split(' = '),這給['foo','bar']
  4. 最後創建對象
1

使用正則表達式在一個特定的字符串進行搜索,查找指定名稱的做法,這將匹配foo = bar部分字符串:

function getNameValuePair(string, needle) { 
    if (!string || !needle) { 
     return false; 
    } 
    else { 
     var newNeedle = needle + '\\s+\\=\\s+\\w+', 
      expr = new RegExp(newNeedle), 
      parsed = string.match(expr).join(), 
      parts = parsed.split(/\s+\=\s+/), 
      returnObj = {'name' : parts[0], 'value' : parts[1]}; 

     return returnObj; 
    } 
} 

var string = 'foo = bar; this = is; not = necessary', 
    nameValueObj = getNameValuePair(string, 'foo'); 

console.log(nameValueObj); 

JS Fiddle demo

這當然可以適應更適合您的要求。

因爲它是,但是:

  1. 功能檢查,這兩個參數都存在,並且如果沒有,簡單地返回false
  2. 創建一個由needle(本例中爲'foo')組成的正則表達式模式,後跟一個或多個空白單元,後跟一個單個=字符,後跟一個或多個空格字符。如果空格不一定總是存在,則最好更改爲newNeedle = needle + '\\s*\\=\\s*\\w+'+匹配「一個或多個」,*匹配「零個或多個」)。
  3. 從圖案創建一個正則表達式,
  4. 測試給定的字符串,看它是否與模式匹配,並且如果是的話,匹配在parsed變量,其存儲,
  5. 拆分parsed變量與另一個正則表達式,有效地分割上後跟一個=後跟零或更多的白色空間的零或更多的白色空間的圖案,存儲該分離的部分在parts數組變量,
  6. 構建從parts變量的對象。
  7. 返回該變量。

更新上面,略有下降,因爲兩行創建一個正則表達式只是

function getNameValuePair(string, needle) { 
    if (!string || !needle) { 
     return false; 
    } 
    else { 
     var expr = new RegExp(needle + '\\s+\\=\\s+\\w+'), 
      parsed = string.match(expr).join(), 
      parts = parsed.split(/\s+\=\s+/), 
      returnObj = {'name' : parts[0], 'value' : parts[1]}; 

     return returnObj; 
    } 
} 

var string = 'foo = bar; this = is; not = necessary', 
    nameValueObj = getNameValuePair(string, 'foo'); 

console.log(nameValueObj); 

JS Fiddle demo

參考文獻:

相關問題