[英]How can I use JSON keys as regex?
我想要以下JSON对象:
let emotes = {
/:-?\)/: 'smiley.png',
/:-?\(/: 'sady.png',
/:-?o/i: 'surprisey.png'
}
我想用这样的文本中的值替换键:
Object.keys(emotes).forEach(function(emote) {
content = content.replace(emote, '<img src="smileys/' + emotes[emote] + '">')
})
这是行不通的。 正确的方法是什么?
我个人将使用数组。 这样就可以使用正则表达式常量,避免从字符串构造RegExp实例,而且还可以保证应用程序的顺序:
let emotes = [
[ /:-?\)/, 'smiley.png' ],
[ /:-?\(/, 'sady.png' ],
[ /:-?o/i, 'surprisey.png' ]
];
然后:
emotes.forEach(function(pair) {
content = content.replace(pair[0], '<img src="smileys/' + pair[1] + '">');
});
如果您不希望数字索引很丑陋(我认为,但对他自己来说很丑),则可以使用对象数组:
let emotes = [
{ pattern: /:-?\)/, src: 'smiley.png' },
{ pattern: /:-?\(/, src: 'sady.png' },
{ pattern: /:-?o/i, src: 'surprisey.png' }
];
要明确的是,这不是JSON对象。 它甚至不是合法的JavaScript对象文字。 JS对象由字符串而不是正则表达式来键控。 您所做的操作在Firefox AFAICT(可能是其他浏览器)中不合法。 检查您的浏览器日志,可能完全拒绝了您对emotes
的定义。
如果您想使用一堆线对,请制作线对数组并使用:
let emotes = [
[/:-?\)/, 'smiley.png'],
[/:-?\(/, 'sady.png'],
[/:-?o/i, 'surprisey.png'],
]
emotes.forEach(function(emotereplacement) {
var [emote, replacement] = emotereplacement;
content = content.replace(emote, '<img src="smileys/' + replacement + '">');
});
您可以将“键”转换为字符串,从而使其成为有效的JSON对象。 另外,语法是Object.keys,而不是Objects.getKeys。
查看下面的工作片段。
let emotes = { ":-?)" : 'smiley.png', ":-?(": 'sady.png', ":-?o": 'surprisey.png' } var content = " :-?) :-?( :-?o"; Object.keys(emotes).forEach(function(emote) { content = content.replace(emote, '<img src="smileys/' + emotes[emote] + '">') }) console.log(content);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.