在Regex问题中需要帮助:TypeError:无法从null读取属性“1”

时间:2013-05-16 16:19:57

标签: javascript regex unicode

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 个答案:

答案 0 :(得分: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));

DEMO: http://jsfiddle.net/XDGk9/

^$锚定不允许全局/多重匹配,正则表达式不会返回.match()的实际数字。

答案 1 :(得分:3)

该例外意味着s.match正在重新归零。这意味着正则表达式不匹配。

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

编辑:

您可以使用string.replace将实体替换为正则表达式。如果字符串中还有其他字符,则此选项非常有用:

s = "a登bc入d"
s.replace(/&#(\d+);/g, function(match, char) {
    return String.fromCharCode(char)
});
// == "a登bc入d"

答案 2 :(得分:1)

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

/&#(\d+);/

答案 3 :(得分:0)

如果找不到匹配项,match方法将返回null,这可能是您发生的事情。