簡體   English   中英

JavaScript中的正則表達式匹配太多

[英]Regular expression match in JavaScript matches too much

我正在使用此表達式:

"g{field1}={field2}a".match(/{([^\{\}]+)\}/g)

我需要獲取“ field1”和“ field2”,但是它返回一個包含“ {field1}”和“ {field2}”的數組。

您可以使用exec ,每個匹配項可以返回多個捕獲組。

var re = /{([^\{\}]+)\}/g,
    matches = [],
    input = "g{field1}={field2}a",
    match;

while (match = re.exec(input)) matches.push(match[1]);

console.log(matches);

您還可以重寫您的正則表達式(此處取決於輸入字符串可以是什么):

var matches = "g{field1}={field2}a".match(/{([^}]+)}={([^}]+)}/).slice(1);

console.log(matches);

如果只需要沒有花括號的數組,則可以使用數組映射方法:

"g{field1}={field2}a".match(/{([^\{\}]+)\}/g).map(function(i){return i.slice(1,-1)})

您可以提前使用

"g{field1}={field2}a".match(/[^\\{\\}]+(?=\\})/g)

如果匹配的字符集后跟一個} ,則它將匹配任何非{}的字符

"g{field1}={field2}a".match(/([^g=a\{\}]+)/g)

回報

["field1", "field2"]

您也可以:

'g{field1}={field2}a'.split(/[{}]/).filter(function(a,i){return i%2;});

如果字符串始終包含匹配的“ {}”對。 還有:

'g{field1}={field2}a'.split(/^[^{]*\{|\}[^{]*\{|\}[^{]*$/g).slice(1,-1);

兩者都可以在任意數量的{…}對(0到n)上使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM