Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 组中的正则表达式子组及其引用方式_Javascript_Regex - Fatal编程技术网

Javascript 组中的正则表达式子组及其引用方式

Javascript 组中的正则表达式子组及其引用方式,javascript,regex,Javascript,Regex,我正在尝试解析如下文档结构: 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 稍后,我将使用这些组构建一个h

我正在尝试解析如下文档结构:

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>'
是否有一种方法可以重复使用我的reg exp的这一部分,重复使用的次数与那些类型的行的重复次数相同:

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

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

有关捕获重复组的信息:

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

获得文本后,请参见此处示例:

我将根据示例将数组分成几行,并在for循环中迭代它们


专业提示:还有。我的大脑一直在思考如何在html字符串中使用这些子组,以便相关html尽可能多地重复。当然,你可以使用量词重复你已经做过的任何部分。查看是否。您不能使用未知数量的捕获组。对于第二部分,您必须使用单独的正则表达式,并且只需将令牌单独解析为数组或其他内容。正则表达式并不是做你想做的事情的最佳或最有效的方法。@mbomb007如果你想给出一个答案,指出我所要求的是不可能的,我可以接受它作为正确的答案。如果你能教我如何做这个迭代,那就太棒了,但这取决于你!快速提问:行是内置的javascript函数吗?我找不到关于它的任何信息。还是你打错了?应该是lineList吗?我假设您将文件中的行放入该变量中。请看链接到的示例a。
([a-zA-Z\s]*)(\d*\.?\d*)(\w*)[\r\n]
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;
}