用新文本替换花括号
replacing curley braces with new text
il8n = {
'en-us':{
hello:"Hello Everyone",
goodbye:"See ya later",
welcome:"Hello how are you?",
design:"Kandi Designs"
}
};
function translate(){
var userLang = navigator.language || navigator.userLanguage;
var body = document.body || document.getElementsByTagName('body')[0];
var html = body.innerHTML;
body.innerHTML = body.innerHTML.replace(/({T_(.*?)})/g, il8n[userLang.toLowerCase()][$1.replace(/{T_|},'').toLowerCase()]);
}
translate();
基本上我想做的是摆脱{T_Hello}
到Hello Everyone
,但因为我吸在正则表达式我的捕获组和使用$1
我不能正确地得到这一点。有人能帮帮忙吗?
你的想法是对的。然而,$1并不是一个变量。将replace
的第二个参数更改为:
function (match, $1) {
return il8n[userLang.toLowerCase()][$1.toLowerCase()];
}
replace
可以接受函数作为实参。然后,将正则表达式中的捕获组缩短为:
/{T_(.*?)}/g
这样可以在replace函数中节省一些不必要的字符串处理。关于性能,您可能希望服务器根据Accept-Language
头发送适当的il8n
对象,或者更好的是,自己执行插入,而不是依赖于脆弱和缓慢的客户端代码(使其可缓存)。
根据您的il8n对象键,您可以这样做来检查T_
后面是否有大写字母。
/T_([A-Z]+)/
也可以添加小写字母或数字:
/T_([A-Za-z0-9]+)/
应该可以:
body.innerHTML = body.innerHTML.replace(
/({T_(.*?)})/g,
function (s) { return il8n [userLang.toLowerCase()] [s.replace(/{T_|}/g,'').toLowerCase()]; }
);
replace()
的第二个参数可以是一个字符串或一个函数,它可以接受很多参数,就像正则表达式中有()组一样,在你的例子中是一个。
事实上,如果你写
s.replace (/a/g, 'b')
,显然,replace()
接收两个字符串。但是,如果你写
s.replace (/a/g, f(x))
然后再一次,replace()
接收两个字符串,第二个是f(x)
返回的字符串,所以如果f(x)
返回'b'
,那么上面的两个表达式是等价的。因为f(x)
是在replace()
有机会看到它之前执行的,所以它不能使用像$1
这样的特殊变量,因为在调用时它们没有定义。
如果您希望代码由replace()
执行,那么它应该是可执行代码:
replace (/a/g, function (x) { return ' [' + x + '] found! '; } )
以便在调用时,形成函数对象,并且每次在replace
内部以参数$1调用该函数(注意正则表达式中的全局修饰符g)。
请注意,你的代码只会在文本下方或调用onload()时才会工作,而不是在文本上方:
<body>
{T_hello} reader!
<script>
your code
</script>
<body>
有效,但
<body>
<script>
your code
</script>
{T_hello} reader!
<body>
没有,因为当它被执行时,<body>
中没有任何东西。调用它的最佳位置是在<body onload='translate()'>
。
我还纠正了你代码中的一个错字:s.replace(/{T_|}
应该是s.replace(/{T_|}/
。
在你的代码中的另一个错误是:s.replace(/{T_|}/
应该是s.replace(/{T_|}/g
,因为它应该做两个替换,而不是一个。
- 使用JavaScript将标题文本替换为按钮文本
- jQuery在用新文本替换HTML文本时淡出HTML文本,而不是仅显示
- 为什么不'使用此JavaScript将文本替换为不起作用的链接
- 将元素文本替换为子项中的值
- 使用 Jquery 将文本替换为笑脸图像
- 将页面上的文本替换为 jQuery 并提示文件下载
- 使用 JavaScript 将文本替换为图像
- 将 d3 演示中的圆圈和文本替换为包含自定义 HTML 和 ko 绑定的 foreignObject
- JavaScript无法用新文本替换文本
- 将表中的文本替换为用户友好的文本
- 将.onclick属性中的文本替换为javascript
- Javascript/Jquery.使用带通配符的正则表达式将纯文本替换为html
- 按名称将文本替换为 JavaScript 属性的内容
- 如何将 JSON 字符串中的文本替换为 Greasemonkey 的用户脚本
- Javascript:用文本替换整个锚点
- 在Chrome扩展程序中将文本替换为Treewalker
- 通过将文本替换为类来换行/中断列表元素
- 如何使用javascript将文本替换为彩色文本
- JavaScript - 消除文本替换的延迟
- j查询遍历和文本替换