使用捕获组$ 1访问对象的键值

时间:2015-12-23 01:11:05

标签: javascript regex javascript-objects

aBelow,我试图通过使用正则表达式定义密钥来访问HTML实体值,该值存储在对象中,如下所示。但是,我得到了蝙蝠侠未定义的罗宾"而不是"蝙蝠侠&罗宾&#34 ;.有人可以向我解释为什么我得到了未定义而不是对象的键值属性?谢谢!

function convertHtmlEntities ( str ) {

    // Object containing all the key value pair of HTML entities.
    var htmlEntities = {
        "&": "&",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&apos;"
    };

    // Regular expression for replacing the items mentioned above with the
    // appropriate HTML entities.
    console.log( str.replace( /([\&\<\>\"\'])+/, htmlEntities['$1'] ) );
    return str.replace( /([\&\<\>\"\'])+/, "$1" );
}

convertHtmlEntities("Batman & Robin"); // Should return "Batman &amp; Robin"

2 个答案:

答案 0 :(得分:2)

您可以将功能传递给String.replace()

str.replace( /([\&\<\>\"\'])+/, function(match){
    return htmlEntities[match];
});

答案 1 :(得分:1)

您可以尝试:

str.replace( /([\&\<\>\"\'])+/, htmlEntities[RegExp.$1]

这将返回(至少对我而言):

"Batman &amp; Robin"

此外,请注意这是deprecated,其功能可能会被浏览器删除。