我有一个大字符串(1116902 个字符长度),我想用正则表达式(非常简单的一个)处理它。我从以 Base64 编码的 Soap 服务器收到响应。所以我只是在适当的 xml 标记之间获取结果,然后解码响应。
这适用于一个小请求。但是当我得到一个大的响应时, replace()
的回调函数方法从未被调用。我尝试在regex101网站上测试该字符串,它可以找到结果。所以我想知道我的 JavaScript 引擎是否有限制。我正在开发使用 Webkit 作为 JavaScript 引擎的 Wakanda Server V10。我无法提供该字符串,因为它包含一些企业信息。
这是我的正则表达式:/xsd:base64Binary">((.|\n)*?)<\/responseData>/
我教过它可能是一个特殊字符,未包含在((.|\n)*?)
中团体。但是为什么 regex101 会找出结果(那么可能是 JavaScript 引擎)
也许有人可以帮助我?
谢谢
最佳答案
如果您可以保证开始和结束分隔符之间没有标签(听起来可能是这样),您可以将 RE 更改为
/xsd:base64Binary">([^<]*)<\/responseData>/
这不需要任何回溯并且可能适合您。
[^<]
简单地意味着除了 <
之外的所有内容特点。由于您的部分的开始标签和结束标签之间不应该有任何标签(至少这是我所理解的),因此在您点击结束标签之前,它将接受所有内容。重要的是 RE 引擎可以立即判断某些内容是否匹配,因此不需要分支或回溯。
关于javascript - 使用字符串的替换方法时是否有长度限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315166/