现在,我们有如下的一个字符串:
var str = "<a href = xxx name=aaa target=_blank title='asdfasf' onclick = alert('blueidea')>";
注意到,里面有些属性没有打引号,那我们怎么做呢?
首先,使用正则表达式匹配标签中的属性值(包括了有引号的、没引号的)
var reg = /(?<==)(\s*)([^=]+)?(?=(\s+|>))/g;
其中,(?<==)是反向预查,表示匹配的前边必须是等号。
(?=(\s+|>))是正向预查,表示匹配的后边必须是若干空白字符或者是右尖角号(考虑到最后一个属性值)。
(\s*)是匹配等号后边的空白字符、([^=]+)? 匹配的是属性值(非贪婪的,这很重要)。
之后,我们使用 str.replace 来添加引号。
这里,我们分两种情况:
情况一:有引号的属性。
情况二:没引号的属性。
console.log(str.replace(reg,function($, $1, $2) {
if($2[0] == '\'' || $2[0] == '\"') {
return $2;
} else {
return "\"" + $2 + "\"";
}
}));
对情况一,直接返回。对情况二,它返回一个左右加引号。
下面是执行的结果。