我试图对以下字符串原型进行替换:"I‘m singing & dancing in the rain." --以下正则表达式与实例正确匹配,但也捕获了&实例后面的字符。"(&)[#?a-zA-Z0-9;]"从上面的原型捕获以下字符串:"&l"。
如何将其限制为只捕获&
编辑:,我应该补充说,我不想单独匹配"&"。
发布于 2009-11-19 16:21:20
查找(这个处理命名、十进制和十六进制实体):
&([A-Za-z]+|#x[\dA-Fa-f]+|#\d+);代之以
&$1;请注意:这确实有可能出错。我建议使用HTML解析器来解码文本。如果它是双重编码,你可以解码两次。HTML和regex即使在小规模上也不能很好地结合在一起。
既然您在JavaScript,我希望您在浏览器中。如果是的话,您手中就有一个很好的DOM解析器。创建一个新元素,将字符串赋值给它的内部HTML属性,并读出文本值。好了。
发布于 2009-11-19 16:29:16
我认为您想要匹配&,但前提是它后面是字母数字字符或特定的标点符号。这就需要向前看。这个正则表达式应该与您想要的匹配,而不需要捕获或使用任何其他字符。
(&)(?=[#?a-zA-Z0-9;])
发布于 2009-11-19 16:17:34
实际上,您正在匹配字符串&l,但捕获的只是&。这是因为捕获组之后的字符类将匹配一个额外的字符。
但是你最初的正则表达式是有一点瑕疵的。一种(不是最佳的)替代办法可能是:
&(#[0-9]+|#x[0-9a-zA-Z]+|[a-zA-Z]+);它将匹配完整的实体或字符声明并捕获&。
https://stackoverflow.com/questions/1764478
复制相似问题