2017-02-13 121 views
-3

我正在学习通过javascript实现的qrcode的源代码。 而我对getUTF8Length的实现感到困惑。 这里是源代码:getUTF8Length的实现

function _getUTF8Length(sText) { 
    var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); 
    return replacedText.length + (replacedText.length != sText ? 3 : 0); 
} 

我想知道如何理解正则表达式,为什么加3的长度。

+1

欢迎来到SO。请访问[帮助],看看有什么和如何问。在这种情况下,您的问题不明确。你想要REGEX的扩展解释吗? – mplungjan

+0

谢谢,我是stackoverflow的初学者。对不起,我错过了问规则。我改变了我的问题。 –

+0

如果可能,你还可以添加一个链接到源代码 – jetpackpony

回答

0

正则表达式会发现所有%00-%FF并将它们转换成 “一”

我不明白的声明

replacedText.length != sText 

我期望这是

replacedText.length != sText.length 

但我无法解释他们为什么要加3

function _getUTF8Length(sText) { 
 
    console.log(encodeURI(sText)) 
 
    var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); 
 
    console.log(replacedText) 
 
    return replacedText.length + (replacedText.length != sText ? 3 : 0); 
 
} 
 

 
// Assuming a text of ABCD CR double bytes 
 
var text = "ABCD \n张加涛"; 
 
console.log(_getUTF8Length(text))

+0

谢谢你,崇拜你,我完全明白现在。看来我应该多想一想。 –