1
function numericEntityToChar(s) {
    //s="登入"  
    console.log(s);
    var chars = String.fromCharCode(s.match(/^&#(\d+);$/)[1]);
    // throws uncaught exception TypeError: cannot read property "1" from null.
    console.log(chars);
    return chars; 
}

我从来没有与 REGEX 合作过,而这个也没有作为第一个帮助。在这方面需要帮助。

4

4 回答 4

5

您可以尝试这样设置:

function numericEntityToChar(s) {
    var re = /&#(\d+);/g,
        ret = "", match;
    while (match = re.exec(s)) {
        ret += String.fromCharCode(match[1]);
    }
    return ret;
}

var str = "登入";
console.log(numericEntityToChar(str));

演示:http: //jsfiddle.net/XDGk9/

和锚定不允许全局/多重匹配,并且正则表达式不会返回^带有.$.match()

于 2013-05-16T16:29:27.423 回答
3

异常意味着s.match返回 null。这意味着正则表达式不匹配。

您的正则表达式 ,/^&#(\d+);$/期望匹配包含单个实体(和号-哈希-数字-分号)的字符串,但您的字符串包含两个。您可以更改正则表达式以使其正确匹配,以匹配第一个、第二个或两者。

编辑:

您可以使用 string.replace 将实体替换为正则表达式。如果字符串中有其他字符,这很有用:

s = "a登bc入d"
s.replace(/&#(\d+);/g, function(match, char) {
    return String.fromCharCode(char)
});
// == "a登bc入d"
于 2013-05-16T16:23:05.750 回答
1

不要锚定你的正则表达式:

/&#(\d+);/
于 2013-05-16T16:24:17.037 回答
0

当没有找到匹配项时,该match方法返回 null,这可能是发生在您身上的事情。

于 2013-05-16T16:22:46.710 回答