JavaScript,正则表达式解析大括号中的字符串内容

javascript, regex parse string content in curly brackets

本文关键字:字符串 正则表达式 JavaScript      更新时间:2023-09-26

我是正则表达式的新手。我正在尝试解析字符串中大括号内的所有内容。我查找了这篇文章作为参考,并完全按照其中一个答案的建议做了,但是结果出乎意料。

这是我所做的

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中阅读正则表达式的好地方在这里,一个测试的好地方在这里

祝你好运!

没有错。但是您需要查看捕获组(数组中的第二个元素(才能获得所需的内容(可以忽略第一个元素(。要获得所有事件,仅运行一次exec是不够的,您需要使用 match 循环访问结果。

编辑:没关系,afaik 您无法访问带有match捕获组。一个更简单的解决方案是使用积极的前瞻性,正如迈克塞缪尔所建议的那样。

这个结果:

["{string1}", "string1"]

向您显示,对于第一个匹配项,整个正则表达式匹配"{string1}",第一个捕获括号匹配"string1"

如果要获取所有匹配项并查看每个匹配项的所有捕获括号,可以使用"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/

试试这个文件

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);
})