2016-10-17 4 views
1

私は、次のようなJSONオブジェクトがしたい: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] + '">') 
}) 

これが機能していません。それを行う正しい方法は何ですか?

+3

プロパティ名は文字列だけすることができます。文字列を使用し、必要に応じてRegExpインスタンスを作成することができます。 – Pointy

+3

* "次のJSONオブジェクトがあります" * - いいえ、そうではありません。 JavascriptのリテラルとJSONの両方で無効な構文です。 – deceze

+0

そうです、私は私の文章を更新します。 – SteeveDroz

答えて

5

個人的に私は、配列を使用します。その後

let emotes = [ 
    [ /:-?\)/, 'smiley.png' ], 
    [ /:-?\(/, 'sady.png' ], 
    [ /:-?o/i, 'surprisey.png' ] 
]; 

:あなたはdidnの場合は、オブジェクトの配列を使用することができ

emotes.forEach(function(pair) { 
    content = content.replace(pair[0], '<img src="smileys/' + pair[1] + '">'); 
}); 

それはあなたが正規表現定数を使用して文字列からRegExpインスタンスを構築しないよう、そして、それはまた、アプリケーションの順序を保証することができますあなたはそれ有効なJSONになるだろうこれは、文字列の中にあなたの 『キー』を回すことができる

let emotes = [ 
    { pattern: /:-?\)/, src: 'smiley.png' }, 
    { pattern: /:-?\(/, src: 'sady.png' }, 
    { pattern: /:-?o/i, src: 'surprisey.png' } 
]; 
+0

良い点、Pointy。私は注文の問題について考えなかった。 – SteeveDroz

+0

@SteeveDrozはい、 'Object.keys()'を反復することは通常 "正しい"順序で行われますが、私が個人的に頼りにしたいことではありません。特に、通常は保証。 – Pointy

2

明らかに、これは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 + '">'); 
}); 
1

「tは(私の意見ではなく、それぞれ自分自身に、わずかに)数値インデックスの醜さが欲しいですオブジェクト。また、構文はObjects.getKeysではなくObject.keysです。

以下の作業スニペットを確認してください。

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);

関連する問題