Javascript 如何用regexp替换捕获组中的多个值

Javascript 如何用regexp替换捕获组中的多个值,javascript,regex,xml,Javascript,Regex,Xml,我有一个格式非常不正确的xml文件,在解析它之前我必须做一些修复 具体地说,我必须在两个给定的标记之间替换大量CDATA(打开和关闭),我想用一个正则表达式来完成 我有一些类似: 数据……其他数据!> 我想要的是将cdata的所有出现(开始和停止,所以和]>)替换为不包含任何内容的标记,并将其删除 非常感谢 编辑1: 我有成千上万的文件。我有一个提取标签内容的正则表达式,即 ()(?!)(.*() 但我想不出一种方法在集团内部插入支票,比如: ^(!)*您的文件中存在相当严重的腐败;看起来CDA

我有一个格式非常不正确的xml文件,在解析它之前我必须做一些修复

具体地说,我必须在两个给定的标记之间替换大量CDATA(打开和关闭),我想用一个正则表达式来完成

我有一些类似:

数据……其他数据!>

我想要的是将cdata的所有出现(开始和停止,所以
]>
)替换为不包含任何内容的标记,并将其删除

非常感谢

编辑1:

我有成千上万的文件。我有一个提取标签内容的正则表达式,即

()(?!)(.*()

但我想不出一种方法在集团内部插入支票,比如:


^(!)*

您的文件中存在相当严重的腐败;看起来CDATA的格式有几种不同的形式。这将捕获您描述的所有错误:

*?\K((?:+)(?=.*)

这个正则表达式检查字符串是否以
开头,获取文本直到
CDATA
标记的“开始”,然后使用
\K
丢弃所有这些。然后,它以任意顺序查找
正如我们可以找到的,尽管每个都至少有一个。正则表达式的最后一位是一个前瞻,以确保结束标记存在

请注意,这将每行只匹配一个格式错误的标记。为了获得所有标记,您可能需要使用此正则表达式运行几次替换。一旦正则表达式不再匹配,您可以确保没有格式错误的标记…或者至少没有带有您在问题中描述的突变的标记


另一方面,如果您想保留所有“格式正确”的CDATA标记,则正则表达式会变得更加丑陋:

*?\K(?(?:[^>]|$)((?:+)(?=*)

这包括一个前瞻性声明,表明您未匹配“格式正确”的CDATA标记(此处称为
)。如果开始
没有匹配的结束
,则此标记运行速度非常慢,因此,如果您的文件中存在此问题,请发出警告


祝你好运!

这不是一个免费的regexp生成器,伙计。你尝试了什么?为什么卡住了?如果它只有一个文件,最好是手动执行,然后确保xml将来不会达到那种状态。@sjahan从来没有想到过。我只是不认为我的解决方案(我现在添加的)不起作用值得一提。@Lestat86总是展示你所做的事情:在这里,人们帮助调试你的代码,而不是为你调试代码。这是一个好习惯,否则,你的帖子可能会很快被关闭!在这里,你已经获得了3票关闭它!@sjahan天哪,没有看到反对票"--我没有发布任何东西,因为我错过了核心部分…从现在起我将始终包含代码。嘿,非常感谢你的帮助!我已经测试了它,它工作了。我花了大约10分钟的时间来正确理解它的功能,这是一个虽然正则表达式:D我希望用一个不应该循环的正则表达式来解决这个问题,但没有免费的l我猜是unch;)