Regex To Match& entity;或&#0-9;和捕获&

时间:2009-11-19 16:12:24

标签: javascript regex

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

如何将其限制为仅捕获&

修改:我应该补充一点,我不想单独匹配"&"

5 个答案:

答案 0 :(得分:4)

寻找(这应对命名,十进制和十六进制实体):

&([A-Za-z]+|#x[\dA-Fa-f]+|#\d+);

替换为

&$1;

警告:这有可能出错。我建议使用HTML解析器来解码文本。如果是双重编码,您可以解码两次。即使是小规模的HTML和正则表达也不能很好地协同工作。

由于您使用的是JavaScript,我希望您使用的是浏览器。如果你是,你有一个很好的DOM解析器。创建一个新元素,将字符串分配给其内部HTML属性并读出文本值。完成。

答案 1 :(得分:2)

我认为你想要匹配&,但前提是后面跟着一个字母数字字符或某个标点符号。这需要 lookahead 。此正则表达式应与您想要的匹配,而不捕获或使用任何其他字符。

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

答案 2 :(得分:1)

实际上你匹配字符串&l捕获的只是&。这是因为捕获组之后的字符类将匹配另一个字符。

但无论如何,你原来的正则表达式有点瑕疵。 A(非最佳)替代可能是:

&(#[0-9]+|#x[0-9a-zA-Z]+|[a-zA-Z]+);

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

答案 3 :(得分:0)

如果您只想匹配&,为什么还要包含字符类[#?a-zA-Z0-9;]

在英语中,您的表达式为“匹配&后跟一个字符,即#,?,小写字母,大写字母或;”。

只需使用(&)

即可

答案 4 :(得分:0)

你可能意味着:

"&([#a-zA-Z0-9]+;)"