首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex匹配&实体或&#0-9;并捕获&

Regex匹配&实体或&#0-9;并捕获&
EN

Stack Overflow用户
提问于 2009-11-19 16:12:23
回答 5查看 7.9K关注 0票数 0

我试图对以下字符串原型进行替换:"I‘m singing & dancing in the rain." --以下正则表达式与实例正确匹配,但也捕获了&amp实例后面的字符。"(&)[#?a-zA-Z0-9;]"从上面的原型捕获以下字符串:"&l"

如何将其限制为只捕获&

编辑:,我应该补充说,我不想单独匹配"&"

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-19 16:21:20

查找(这个处理命名、十进制和十六进制实体):

代码语言:javascript
复制
&([A-Za-z]+|#x[\dA-Fa-f]+|#\d+);

代之以

代码语言:javascript
复制
&$1;

请注意:这确实有可能出错。我建议使用HTML解析器来解码文本。如果它是双重编码,你可以解码两次。HTML和regex即使在小规模上也不能很好地结合在一起。

既然您在JavaScript,我希望您在浏览器中。如果是的话,您手中就有一个很好的DOM解析器。创建一个新元素,将字符串赋值给它的内部HTML属性,并读出文本值。好了。

票数 4
EN

Stack Overflow用户

发布于 2009-11-19 16:29:16

我认为您想要匹配&,但前提是它后面是字母数字字符或特定的标点符号。这就需要向前看。这个正则表达式应该与您想要的匹配,而不需要捕获或使用任何其他字符。

(&)(?=[#?a-zA-Z0-9;])

票数 2
EN

Stack Overflow用户

发布于 2009-11-19 16:17:34

实际上,您正在匹配字符串&l,但捕获的只是&。这是因为捕获组之后的字符类将匹配一个额外的字符。

但是你最初的正则表达式是有一点瑕疵的。一种(不是最佳的)替代办法可能是:

代码语言:javascript
复制
&(#[0-9]+|#x[0-9a-zA-Z]+|[a-zA-Z]+);

它将匹配完整的实体或字符声明并捕获&

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1764478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档