2016-08-24 99 views
0

免責聲明 - 絕對新的正則表達式....正則表達式來找到特定字符串在javascript

我有一個這樣的字符串:

subject=something||x-access-token=something 

爲此,我需要提取兩個值。 Subjectx-access-token

作爲一個起點,我想收集兩個字符串:subject=x-access-token=。對於這種這裏是我做過什麼:

/[a-z,-]+=/g.exec(mystring) 

它返回只有一個元素subject=。我期待他們兩個。我在哪裏做錯了?

+2

可能會更容易分裂的雙管,然後拆分等號每個 – scrappedcola

+0

想做正則表達式的方式...學習它們:) – beNerd

+0

@scrappedcola是正確的。應該優化使用正確的工具。我會使用正則表達式來進行實際的模式匹配。 http://regex101.com/ –

回答

2

g修改不影響exec,因爲exec只有規範返回的第一個匹配。你想要的是match方法:

mystring.match(/[a-z,-]+=/g) 
+0

這確實回答我的問題。但是想要更開明。我如何開始使用正則表達式搜索特定的部分。例如在這裏,我正在接近它,首先找到字符串'subject =',然後閱讀所有內容,直到我找到一個||。 – beNerd

+0

您可以添加'(。*?)(?= \ | \ || $)'到最後,第一個捕獲組將獲得您的數據。 – RamenChef

0

如果你真的想用純正則表達式來做到這一點:

var input = 'subject=something1||x-access-token=something2' 
 
var m = /subject=(.*)\|\|x-access-token=(.*)/.exec(input) 
 
var subject = m[1] 
 
var xAccessToken = m[2] 
 
console.log(subject); 
 
console.log(xAccessToken);

但是,它很可能是吸塵器把它分解相反:

console.log('subject=something||x-access-token=something' 
 
     .split(/\|\|/) 
 
     .map(function(a) { 
 
     a = a.split(/=/); 
 
     return { key: a[0], val: a[1] } 
 
     }));

0

不需要正則表達式。寫一個小解析器,很簡單。當有涉及的逃逸模式,它可以讓你有||的值,或當值可以包含一個=在我的出現

function parseValues(str) { 
    var result = {}; 

    str.split("||").forEach(function (item) { 
     var parts = item.split("="); 
     result[ parts[0] /* key */ ] = parts[1]; /* value */ 
    }); 

    return result; 
} 

使用

var obj = parseValues("subject=something||x-access-token=something-else"); 
// -> {subject: "something", x-access-token: "something-else"} 

var subj = obj.subject; 
// -> "something" 

var token = obj["x-access-token"]; 
// -> "something-else" 

其他併發症。

你也可以用正則表達式來解決這些問題,但是使用基於解析器的方法,他們將更容易解決。

0

您必須執行exec兩次以獲取2個提取的字符串。

根據MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

如果你的正則表達式使用「G」標誌,則可以使用exec()方法多次找到相同的字符串匹配連續。

通常,人們通過一個while循環提取與模式相匹配的所有字符串。請在瀏覽器控制檯中執行以下代碼以查看它的工作原理。

var regex = /[a-z,-]+=/g; 
var string = "subject=something||x-access-token=something"; 
while(matched = regex.exec(string)) console.log(matched); 
+0

而不是運行while循環,我只執行了兩次exec,但得到了相同的結果。一個元素 - ['subject =']。在Chrome控制檯中測試 – beNerd

0

您可以將字符串轉換爲有效的JSON字符串,然後解析它檢索包含預期的數據的對象。

var str = 'subject=something||x-access-token=something'; 
 
var obj = JSON.parse('{"' + str.replace(/=/g, '":"').replace(/\|\|/g, '","') + '"}'); 
 
console.log(obj);

0

我不認爲你需要的正則表達式在這裏,只需使用JavaScript內置函數 「分裂」。

var s = "subject=something1||x-access-token=something2"; 
    var r = s.split('||'); // r now is an array: ["subject=something1", "x-access-token=something2"] 
    var i; 
    for(i=0; i<r.length; i++){ 
    // for each array's item, split again 
    r[i] = r[i].split('='); 
    } 

在最後你有一個像矩陣如下:

y  x 0    1 
    0  subject   something1 
    1  x-access-token something2 

,並且可以使用X和Y訪問的元素:

"subject" == r[0][0] 
"x-access-token" == r[1][0] 
"something2" == r[1][1] 
相關問題