我正在尝试对以下字符串原型进行替换:"I‘m singing & dancing in the rain."
以下正则表达式正确匹配实例,但也捕获&
实例后面的字符。 "(&)[#?a-zA-Z0-9;]"
从上面的原型中捕获以下字符串:"&l"
。
如何将其限制为仅捕获&
?
修改:我应该补充一点,我不想单独匹配"&"
。
答案 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]+;)"