用正则表达式在JavaScript中替换HTML属性值

4
我可以帮您将 HTML 属性的双引号替换为单引号。例如:
如果输入是:
<a onclick="Track("http://www.example.com")">Track Me</a>

输出结果将为:
<a onclick='Track("http://www.example.com")'>Track Me</a>

这里需要将 onclick="Track("http://www.example.com")" 替换为 onclick='Track("http://www.example.com")',即只需要将 onclick="..." 替换为 onclick='...'

在我的情况下,内容是从 HTML 编辑器中检索出来的,需要使用 JavaScript 在客户端清理内容。我目前能想到的唯一方法是使用 Regex onclick 双引号属性替换为单引号属性,且仅当 "Track" 函数在 onclick 属性中使用时才进行替换。

我尝试过类似这样的代码:jsFiddle

我正在寻找任何解决方案。非常感谢您的帮助。

谢谢。


1
有没有绝对的办法修改编辑器以正确存储它? - Marty
HTML代码有误,请使用您喜欢的编辑器更改源代码。 - Richard Schneider
需要使用正则表达式来解析HTML的事实意味着你做错了。 - setec
我认为你应该更改你的逻辑。 - jhyap
@setec 我认为这不算使用正则表达式解析HTML - OP并不想提取任何数据,只是在语法上进行纠正。 - Marty
我同意 setec。有人能帮我找到用于将 onclick="..." 替换为 onclick='...' 的正则表达式吗? - Dukhabandhu Sahoo
2个回答

1

如果你不能改变别人,那就改变自己。

var str = '<a onclick="Track("http://www.example.com")">Track Me</a>';

console.log(str.replace(/onclick="Track\("([^"]+)"\)"/, 'onclick=\'Track("$1")\''));

谢谢。正则表达式对我有用。我只是修改了它:/onclick="Track\("([\s\S]+)"\)"/ - Dukhabandhu Sahoo

0
如果您仍在寻找正则表达式,可以使用此示例。它将为您提供以下链接:<a onclick="Track('http://www.example.com')">Track Me</a>
var s = '<a href="#" target="_blank" 
         onclick="Track("http://www.example.com/")">Test Link</a>';

var p = s.replace(/(onclick=")(.*)(\")/,function(match,prefix,handler,suffix){
    return prefix + handler.replace(/"/g,'\'') + suffix;
});

console.log(p);

并且fiddle用于演示;

我没有看到您正在寻找版本<a onclick='Track("http://www.example.com")'>Track Me</a>,因此您可以使用上面的代码更改此行。

var p = s.replace(/(onclick=")(.*)(\")/,function(match,prefix,handler,suffix){
    return prefix.replace(/"/,'\'') + handler + suffix.replace(/"/,'\'');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接