尝试在JavaScript正则表达式中重复捕获块
Trying to repeat capture block in JavaScript regex
本文关键字:JavaScript 正则表达式 更新时间:2023-09-26
下面是我的body。基本上,每个块都由一行隔开,上面什么都没有。每个块在括号中有一个标题,然后可以有任意数量的属性,格式为word在左边,然后等号,然后words在右边。
[General]
StartWithLastProfile=0
[Profile0]
Name=default
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1
[Profile1]
Name=cleanER One Here
IsRelative=1
Path=Profiles/k46wtieb.cleanER One Here
我想要得到3个匹配。每个应该看起来像:[whole match,title,prop1,val1,propN,valN]
Match1:
['[General]
StartWithLastProfile=0','General','StartWithLastProfile','0']
Match2:
['[Profile0]
Name=default
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1','Profile0','Name','default','IsRelative','1','Path','Profiles/vr10qb8s.default','Default','1']
等等
这是我的正则表达式: var patt = /'[.*'](?:'s+?(['S]+)=(['S]+)+/mg;
var blocks = [];
var match;
while (match = patt.exec(readStr)) {
console.log(match)
}
但这是吐出来的:[whole match, title, propLAST, valLAST];
。如果我把正则表达式的最后一个+改成+?然后得到[whole match, title, propFIRST, valFIRST];
。
这个正则表达式工作,但有一个噱头:
var patt = /'[.*'](?:'s+?(['S]+)=(['S]+))(?:'s+?(['S]+)=(['S]+))?(?:'s+?(['S]+)=(['S]+))?(?:'s+?(['S]+)=(['S]+))?(?:'s+?(['S]+)=(['S]+))?/mg;
现在返回:
[ "[General]
StartWithLastProfile=0", "StartWithLastProfile", "0", undefined, undefined, undefined, undefined, undefined, undefined, undefined, 1 more… ]
[ "[Profile0]
Name=default
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1", "Name", "default", "IsRelative", "1", "Path", "Profiles/vr10qb8s.default", "Default", "1", undefined, 1 more… ]
[ "[Profile1]
Name=cleanER
IsRelative=1
Path=Profiles/k46wtieb.clean", "Name", "cleanER", "IsRelative", "1", "Path", "Profiles/k46wtieb.clean", undefined, undefined, undefined, 1 more… ]
我不希望那些不必要的未定义在最后,这个模式是有限的多少(?:'s+?(['S]+)=(['S]+))?
我粘贴在模式的末尾
LIVE DEMO
JavaScript代码string = string.split(/'n'n/g); // split along the double newline to get blocks
var matches = []; // the complete matches array has `match1`, `match2`, etc.
string.forEach(function(elem, index){ // for each block
var matchArr = []; // make a matchArr
matchArr.push(elem); // wholeMatch
elem.replace(/'[([a-z0-9]+)']/i, function(match, $1){
matchArr.push($1); // get the title
});
elem.replace(/([a-z]+)=(.+)/ig, function(match, $1, $2){
matchArr.push($1); // property
matchArr.push($2); // value
});
matches.push(matchArr); // push the `match` in bigger `matches` array
});
console.log(matches); // get the whole matches array
// You can use `matches[0]` to get the 1st match, and so on.
希望有帮助!
相关文章:
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 将javascript正则化为vb
- 将po-box javascript正则表达式转换为c#regex
- 被javascript正则表达式分组卡住了
- 从字符串中提取年份的Javascript正则表达式
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- JavaScript正则表达式匹配量
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- javascript正则表达式来识别所有特殊字符
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 查找所有注释的JavaScript正则表达式
- javascript正则表达式验证未按预期工作
- javascript正则表达式,用于匹配带数字和不带数字的字符串
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- JavaScript正则表达式(带_-的字母数字字符)
- 用特定的javascript正则表达式替换每个单词
- 搜索日历事件的Javascript正则表达式
- 如何获取 JavaScript 正则表达式子匹配的位置
- 正则表达式子字符串以JavaScript开始和结束