【发布时间】:2018-11-01 06:27:31
【问题描述】:
我遇到了运行缓慢的正则表达式的问题,但仅限于模式不匹配的情况。在所有其他情况下,性能是可以接受的,即使文本末尾的模式匹配。我正在测试 100KB 文本输入的性能。
我想要做的是将输入转换为使用 [] 而不是 括号的类似 HTML 的语法,并将其转换为有效的 XML。
示例输入:
...some content[vc_row param="test1"][vc_column]text [brackets in text] content[/vc_column][/vc_row][vc_row param="xxx"]text content[/vc_row]...some more content
样本输出:
...some content<div class="vc_row" param="test1"><div class="vc_column" >text [brackets in text] content</div></div><div class="vc_row" param="xxx">text content</div>...some more content
为此,我使用正则表达式:
/(.*)(\[\/?vc_column|\[\/?vc_row)( ?)(.*?)(\])(.*)/
我在 while 循环中执行此操作,直到模式匹配。
正如我之前提到的,这可行,但最后一次迭代非常慢(如果没有匹配项,则首先迭代)。这是我正在使用的完整 javascript:
var str = '...some content[vc_row param="test1"][vc_column]text content[/vc_column][/vc_row][vc_row param="xxx"]text content[/vc_row]...some more content';
var regex = /(.*)(\[\/?vc_column|\[\/?vc_row)( ?)(.*?)(\])(.*)/;
while (matches = str.match(regex)) {
matches = str.match(regex);
if (matches[2].slice(1, 2) !== '/')
str = matches[1] + "<div class=\"" + matches[2].slice(1) + "\"" + " " + matches[4] + ">" + matches[6];
else
str = matches[1] + "</div>" + matches[6];
}
如何提高正则表达式“不匹配”的性能?
【问题讨论】:
标签: javascript regex html-parsing