1

我有一个大字符串(1116902 字符长度),我想用一个正则表达式(非常简单)处理它。我从一个以 base64 编码的肥皂服务器得到响应。所以我只是在适当的 xml 标签之间得到结果,然后解码响应。

这适用于一个小要求。但是当我得到一个很大的响应时,该replace()方法的回调函数永远不会被调用。我曾尝试在 regex101 网站上测试该字符串,它可以找到结果。所以我想知道我的 JavaScript 引擎是否存在限制。我正在开发一个使用 Webkit 作为 JavaScript 引擎的 Wakanda Server V10。我无法提供该字符串,因为它包含一些企业信息。

这是我的正则表达式:/xsd:base64Binary">((.|\n)*?)<\/responseData>/

我教它可能是一个不包含在((.|\n)*?)组中的特殊字符。但是为什么 regex101 找出结果(那么可能是 JavaScript 引擎)

也许有人可以帮助我?

谢谢

4

1 回答 1

1

如果您可以保证您的开始和结束分隔符之间没有标签(听起来可能是这种情况),您可以将您的 RE 更改为

/xsd:base64Binary">([^<]*)<\/responseData>/ 

这不需要任何回溯,并且可能对您有用。

[^<]仅仅意味着除了角色之外的一切<。因为在您的部分的开始标签和结束标签之间不应该有任何标签(至少这是我所理解的),它将接受所有内容,直到您点击结束标签。重要的是 RE 引擎可以立即判断某些内容是否匹配,因此不需要分支或回溯。

于 2015-12-16T19:21:39.437 回答