使用字符串的替换方法时是否有长度限制?

Is there a length limitation when using replace method of a string?

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

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

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

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

也许有人可以帮助我?

谢谢

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

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

这应该不需要任何回溯并且可能适合您。

[^<] 仅表示 < 字符以外的所有内容。因为你的部分的开始和结束标签之间不应该有任何标签(至少我是这么理解的)在你点击结束标签之前会接受所有内容。重要的是 RE 引擎可以立即判断是否匹配,因此不需要分支或回溯。