【发布时间】:2017-01-18 15:43:26
【问题描述】:
我已经解析了一个字符串到索引idx。我的下一个解析步骤使用正则表达式。它需要匹配字符串的下一部分,即从位置idx 开始。如何有效地做到这一点?
例如:
let myString = "<p>ONE</p><p>TWO</p>"
let idx
// some code not shown here parses the first paragraph
// and updates idx
idx = 10
// next parse step must continue from idx
let myRegex = /<p>[^<]*<\/p>/
let subbed = myString.substring(idx)
let result = myRegex.exec(subbed)
console.log(result) // "<p>TWO</p>", not "<p>ONE</p>"
但myString.substring(idx) 似乎是一项相当昂贵的操作。
有没有像这样的正则表达式操作:result = myRegex.execFromIndex(idx, myString);?
一般来说,我想从不同的索引开始正则表达式匹配,这样我就可以排除部分字符串并避免已经解析的匹配。所以一次它可以来自 myString[0] 另一次来自 myString[51] 等等。
有没有办法有效地做到这一点?我正在解析数十万行,并希望以尽可能便宜的方式执行此操作。
【问题讨论】:
-
错字
myString.length -
如果你真的很在意效率,尽量不要使用正则表达式。
-
构造正则表达式实例,然后设置其
.lastIndex属性。 Read the documentation. -
@Faibbus 你有什么建议呢?我很确定我自己写不出比正则表达式更有效的搜索。
-
如果您提供您决定只需要从某个索引搜索的逻辑,这个问题可能会得到更好的答案。
标签: javascript regex parsing