[英]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);
試試這個文件
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.