javascript - JS字符串变量: why aren´t special characters substituted?

标签 javascript regex string rtf

我试图找到一种简单的 JS 方法将 RTF 转换为纯文本,我发现 that simple solution这似乎可以满足我的需求。但是,我的所有 RTF 都是葡萄牙语,其中有一些 Latin1 字符没有被上述函数替换。

我刚刚又放置了一个正则表达式来用 Javascript 的“\xhh”替换 RTF 的“\'hh”序列,所以我有:

function convertToPlain(rtf) {
    rtf = rtf.replace(/\\par[d]?/g, "")

    rtf = rtf.replace(/\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?/g, "").trim()

    rtf = rtf.replace(/\\'/g, '\\x')

    return rtf;
}

替换发生了。但是,在 JSFiddle 中使用代码时,我无法获取返回的字符串,并替换其“\xhh”序列。这是结果示例:

 a inaugura\xe7\xe3o do novo Castel\xe3o, para as competi\xe7\xf5es

但是,如果我更改 return 语句以使用上面的示例作为文字,例如...

return " a inaugura\xe7\xe3o do novo Castel\xe3o, para as competi\xe7\xf5es"

...字符按预期替换:

 a inauguração do novo Castelão, para as competições

字符串变量(但不是字符串文字)似乎发生了一些事情,导致其特殊字符不被替换。然而,我在 SO 中找不到对此的任何解释,在 MSDN、W3C、我拥有的书籍中也找不到任何解释。

有人可以在这里阐明一下吗?谢谢!

法布里西奥

最佳答案

您收到一个带有转义字符的字符串,您需要对它们进行转义,就像我想象的那样简单。字符串中没有自动转义转义字符序列的魔力,这是正确的(否则你怎么能存储它们?)。

我认为您正在寻找这个:

How do I decode a string with escaped unicode?

那里表达的常见方法是使用 unescape(JSON.parse(...)) (通过链接查看示例),否则您必须自己扫描并转换它们(接受的答案在该页面上)。

还有另一种使用 eval('"'+s+'"') 的方法,但切勿对从服务器端接收的文本执行此操作。如果您 100% 确定这样做是安全的,那就没问题(甚至 Doug Crockford 在他的 JSON 解析器中也使用了它)。

以下是已接受答案中的代码,并针对您的案例进行了编辑:

var x = "a inaugura\\xe7\\xe3o do novo Castel\\xe3o, para as competi\\xe7\\xf5es";
var r = /\\u([\d\w]{4})|\\x([\d\w]{2})/gi;
x = x.replace(r, function (match, grp, grp2)) {
    return String.fromCharCode(parseInt(grp||grp2, 16)); } );
x = unescape(x);
console.log(x);

结果:

a inauguração do novo Castelão, para as competições

注意:代码更改主要在正则表达式中,添加 |\\x([\d\w]{2}) 并将 {4} 更改为{2},并支持 \x,因为您使用的是 1 字节十六进制转义字符(0x??,对于 256 以下的字符)而不是 2 字节 unicode \u??? 方法。

关于javascript - JS字符串变量: why aren´t special characters substituted?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602017/

相关文章:

java - 根据不同的分隔符解析字符串

javascript - 如何使用 Google 自定义搜索 API 下载 100 张图像以用于处理?

javascript - jQuery .each css 不是函数

javascript - Chrome 不会在需要时重绘页面

c# - 没有特殊字符的文本框

javascript - 使用 javascript 正则表达式解析单元

javascript - Javascript 中的空数组值

regex - sed,在第一个数字之前插入空格,但前提是不存在空格

python - Python 中正则表达式的混淆行为

java - 如何从 Java 中的任何字符串中获取字母数字字符串?