组内的正则表达式子组以及引用它们的方式
Regular expression subgroups inside groups and the way to reference them
我正在尝试解析这样的文档结构:
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;
}
相关文章:
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 在没有ajax的情况下将多个变量传递到引用页面的最佳方式
- 在方法中的函数中引用 CoffeeScript 类中的“this”的最佳方式是什么?
- 组内的正则表达式子组以及引用它们的方式
- JavaScript 的这个对象是否以我认为的方式引用新创建的对象
- Javascript:从给定的两个片段中引用“this”的可接受方式
- 有没有快捷方式可以引用我的 DIV 中的元素
- 单例在JS/coffeescript中引用自身的优雅方式
- 如何通过引用传递超时?或者更好的实施方式
- 使用AngularJS和TypeScript以简单的方式引用
- 在对象中引用Javascript对象的正确方式
- 引用导出属性的多种方式之间的差异
- 在UserControl(ascx)中引用javascript的最佳方式
- YUI库-保持对对象的全局引用的最佳方式
- 从另一个属性引用js属性的正确方式
- 将javascript函数的guid作为值而非引用传递的最佳方式
- 以编程方式添加视图,然后引用这些视图
- 在Angular中,在闭包中引用服务属性/方法最合适的方式是什么?
- 通过快捷方式引用Javascript对象
- 为什么我不能以相同的方式引用所有属性