组内的正则表达式子组以及引用它们的方式

Regular expression subgroups inside groups and the way to reference them

本文关键字:方式 引用 正则表达式      更新时间:2023-09-26

我正在尝试解析这样的文档结构:

Headline
c=myClass1 myClass2 myClass3
Some text plus a number3gr
More text plus another number2cm
More text plus another number2.2m

我有一个正则表达式,可以将重要部分捕获到组中:

/(.*)['r'n]c=(.*)['r'n]*([a-zA-Z's]*)('d*'.?'d*)('w*)['r'n]/g

稍后我使用这些组来构建一个 html 字符串:

'<xmp><!--begin recipe--'><h2>$1</h2><div class="$2"><div class="serves">Serves: <input type="text" class="servesinput" value="2" size="3"></div><span class="oldMulti">2</span></br><table class="ingredients"><tr><th>Amount:</th><th>Ingredient:</th></tr><tr><td class="amount $5 ">$4</td><td>$3</td></tr></div></xmp>'

这就是我卡住的地方:在空行之后,可以有任意数量的行,如下所示:

 Some text plus a number3gr

有没有办法根据需要多次重用我的 reg exp 的这一部分(与这些类型的行一样多):

([a-zA-Z's]*)('d*'.?'d*)('w*)['r'n]

也许我可以利用子组?但是我不知道如何在 html 字符串中重复结果。

有关捕获重复组的信息:http://www.regular-expressions.info/captureall.html

为了更有效的方法,我会尝试手动逐行解析文件,因为正则表达式可能效率很低。

一旦你有了文本(参见这里的例子:)如何在 JavaScript 中逐行读取文件?

我会根据示例分成几行(数组),并在for循环中遍历它们。

var headline = "";
var classes = [];
var lineList = [];
var line;
var count = 0;
headline = lines[0];
classes = lines[1].split(" ");
classes[0] = classes[0].substring(2); // cut off "c=" in first token
for (line in lines) {
    if (count > 2) {
        // line is after the blank line
        // do something
    }
    count += 1;
}