Javascript 如何从字符串中解码链接?

Javascript 如何从字符串中解码链接?,javascript,regex,Javascript,Regex,在javascript中,我们返回带有替换符号的行。若行具有链接,则不需要替换链接的符号 为此,我们使用以下代码: function Html(text) { var map = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#039;' }; var

在javascript中,我们返回带有替换符号的行。若行具有链接,则不需要替换链接的符号

为此,我们使用以下代码:

function Html(text) {
    var map = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
    };

    var end_text = text.replace(/[&<>"']/g, function(m) { return map[m]; });
    console.log(end_text);
    end_text = end_text.replace(/&lt;a href=&quot;([\/a-zA-Z\s]+)&quot;(\stitle=&quot;[a-zA-Z0-9\s-]+&quot;)?(\sclass=&quot;[a-zA-Z0-9\s-]*&quot;)?&gt;([a-zA-Z\s-]+)&lt;\/a&gt;/g,'<a href="$1"$2$3>$4</a>');
    //<a href="$1"$3>$4</a>

    return end_text;
}

var str = '<a href="/homepage/test" title="go-go-go">go-go-go</a>';
console.log(Html(str));
函数Html(文本){
变量映射={
“&”:“&;”,
'': '',
'"': '"',
"'": '''
};
var end_text=text.replace(/[&']/g,函数(m){returnmap[m];});
console.log(结束文本);
end_text=end_text.replace(/a href=“([\/a-zA-Z\s]+)”(\stitle=“[a-zA-Z0-9\s-]+”)(\sclass=“[a-zA-Z0-9\s-]*”)([a-zA-Z\s-]+)\/a/g';
//
返回结束文本;
}
var-str='';
log(Html(str));
首先我们替换行中的符号,然后尝试解码字符串中的链接。但我们遇到了问题:我们得到的是
,而不是


哪里有错误以及是否有可能改进代码?

您的正则表达式完全按照您的要求执行:
$2
$3
由它们自己替换,即包括
s

所以我看不到任何简单的方法来解决这个问题,以达到你想要的效果

否则您可能会这样做:
(编辑:根据OP下面的评论,当
标题
包括“主页”时,现在包括一个保留编码实体的测试)

函数Html(文本){
变量映射={
“&”:“&;”,
'': '',
'"': '"',
"'": '''
};
var end_text=text.replace(/[&']/g,函数(m){returnmap[m];});
console.log(结束文本);
返回end_text.replace(/a([\s\s]*?)([a-zA-Z\s-]+)\/a/g,
功能(匹配、标记、内容){
如果(/title=“[\s\s]*主页[\s\s]*”/.test(标记)){
复赛;
}
返回“”
));
log(Html(//应该是编码实体的结果)
''

));
您的正则表达式完全按照您的要求执行:
$2
$3
由它们自己替换,即包括
s!”

所以我看不到任何简单的方法来解决这个问题,以达到你想要的效果

否则您可能会这样做:
(编辑:根据OP下面的评论,当
标题
包括“主页”时,现在包括一个保留编码实体的测试)

函数Html(文本){
变量映射={
“&”:“&;”,
'': '',
'"': '"',
"'": '''
};
var end_text=text.replace(/[&']/g,函数(m){returnmap[m];});
console.log(结束文本);
返回end_text.replace(/a([\s\s]*?)([a-zA-Z\s-]+)\/a/g,
功能(匹配、标记、内容){
如果(/title=“[\s\s]*主页[\s\s]*”/.test(标记)){
复赛;
}
返回“”
));
log(Html(//应该是编码实体的结果)
''

));
正在替换
/[&']/
可能在执行href regex后替换
/[&']/
正在替换
/[&']/
可能在执行href regex后替换。您能帮帮忙吗-如何在条件
中添加单词异常([a-zA-Z\s-]+)
?也就是说,在这种情况下无法处理字符串
var str='';
home
-单词异常,如果文本链接有他,replace应该不起作用。怎么做?@Nik我不明白:你是说如果
title
包含“home”,则不执行第二个
.replace()
“?你能帮助-如何在条件
([a-zA-Z\s-]+)
中添加单词异常吗?也就是说,该字符串
var str='';
在此条件下无法处理。
home
-单词异常,如果文本链接有他,则替换不应该工作。怎么做?@Nik我不明白:你的意思是你想要第二个
.replace()
如果
标题
包含“主页”,则不执行?