簡體   English   中英

javascript,正則表達式解析大括號中的字符串內容

[英]javascript, regex parse string content in curly brackets

我是正則表達式的新手。 我正在嘗試解析字符串中大括號內的所有內容。 我查了這篇文章作為參考,並完全按照其中一個答案的建議做了,但是結果出乎意料。

這是我所做的

var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/
regex.exec(abc) // i got ["{string1}", "string1"]
             //where i am expecting ["string1", "string2"]

我想我錯過了一些東西,我做錯了什么?

更新

我可以使用/g獲取它以進行全局搜索

var regex = /{(.*?)}/g
abc.match(regex) //gives ["{string1}", "{string2}"]

我怎樣才能得到沒有括號的字符串?

"test/abcd{string1}test{string2}test".match(/[^{}]+(?=\})/g)

產生

["string1", "string2"]

它假設每個}都有一個對應的{在它之前和{...}部分沒有嵌套。 它也不會捕獲空{}部分的內容。

var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/g
var matches;

while(matches = regex.exec(abc))
    console.log(matches);

試試這個:

var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/g //g flag so the regex is global
abc.match(regex) //find every match

在javascript閱讀有關正則表達式的好地方是在這里 ,和一個不錯的地方,測試是在這里

祝好運!

試試這個文件

const fs = require('fs');

fs.readFile('logs.txt', function(err, data) {
if(err) throw err;
const paragraph = "'" + data + "'";
const regex = /\d+\<;>\S+\<;>(\d+)\<;/g;
const found = paragraph.match(regex);

console.log(found);
})

結果如下:

["{string1}", "string1"]

向您展示,對於第一場比賽,整個正則表達式匹配"{string1}"並且第一個捕獲括號與"string1"匹配。

如果你想獲得所有匹配並看到每個匹配的所有捕獲parens,你可以使用“g”標志並循環,多次調用exec() ,如下所示:

var abc = "test/abcd{string1}test{string2}test"; //any string
var regex = /{(.+?)}/g;
var match, results = [];
while (match = regex.exec(abc)) {
    results.push(match[1]);   // save first captured parens sub-match into results array
}

// results == ["string1", "string2"]

你可以在這里看到它的工作: http//jsfiddle.net/jfriend00/sapfm/

沒有錯。 但是你需要查看你的捕獲組(數組中的第二個元素)來獲取你想要的內容(你可以忽略第一個)。 為了解決所有問題,運行exec一次是不夠的,你需要使用match來循環結果。

編輯 :沒關系,afaik你無法訪問match捕獲組。 正如Mike Samuel 建議的那樣,一個更簡單的解決方案是使用積極的前瞻。

暫無
暫無

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

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