繁体   English   中英

如何将JSON键用作正则表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM