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合作,而且这个也没有作为第一个帮助。需要帮助。
答案 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,这可能是您发生的事情。