2016-09-17 12 views
0

私は、文字列内の複数の単語/文字列を置換しようとしていると私は同じでcolor_1color_10を交換しなければならなかったまで、彼らはすべてが働い How to replace all occurrences of a string in JavaScript?文字列1と、複数の文字列のトラブルを交換し、10

ここで提案されたすべてのソリューションをテストしました時間。 ここで、color_10置換はcolor_1の一部で、最後は0です。

https://jsfiddle.net/fqqLdxkz/1/

string = 'padding:0px 0px 0px 0px;margin:0px auto 0px auto;background-color:color_9;color_1;color_5;color_4;color_10;'; 
 
var palettes = { 
 
    "theme": "{\"color_1\":\"#454545\",\"color_2\":\"#40b1e2\",\"color_3\":\"#efefef\",\"color_4\":\"#fafafa\",\"color_5\":\"#cccccc\",\"color_6\":\"#e91e63\",\"color_7\":\"#e91e63\",\"color_8\":\"#e74c3c\",\"color_9\":\"#2c3e50\",\"color_10\":\"#344957\"}" 
 
} 
 

 
function PaletteColor(css) { 
 

 

 
    if (css.indexOf('color_') !== -1) { 
 

 
    var $palette = JSON.parse(palettes.theme); 
 

 
    $.each($palette, function(name, color) { 
 
     // css = css.replace(new RegExp(name, 'g'), color); 
 
     css = css.split(name).join(color); 
 
    }); 
 

 
    } 
 

 
    return css; 
 
} 
 
$('#result').html(PaletteColor(string));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
 
<div id="result">...</div>

私は何をしないのですか?

更新:JSON反転、color_10最初COLOR_1最後にテストし、
それはhttps://jsfiddle.net/fqqLdxkz/2/

に動作します。しかし、それは最初の値よりもインデックスを交換しているように見えますので、それは意味がありません。

+0

?これはまさに何が起こるべきかです。あなたは 'color_1'という文字列を置き換えるコードを書いています。 – gravityplanx

+0

@gravityplanx、最後の交換を確認してください。それはcolor_1とcolor_10の組み合わせですhttp://prntscr.com/cj930s、http://prntscr.com/cj934z – Benn

答えて

2

正規表現に単語境界アサーション\bを入れて、color_1\bcolor_10に一致しないようにすることができます。あなたが正確に止まったまま

var string = 'padding:0px 0px 0px 0px;margin:0px auto 0px auto;background-color:color_9;color_1;color_5;color_4;color_10;'; 
 
var palettes = { 
 
    theme: {"color_1":"#454545","color_2":"#40b1e2","color_3":"#efefef","color_4":"#fafafa","color_5":"#cccccc","color_6":"#e91e63","color_7":"#e91e63","color_8":"#e74c3c","color_9":"#2c3e50","color_10":"#344957"} 
 
} 
 

 
function paletteColor(css) { 
 
    if (css.indexOf('color_') !== -1) { 
 
    var $palette = palettes.theme; 
 

 
    $.each($palette, function(name, color) { 
 
     css = css.replace(new RegExp('\\b' + name + '\\b', 'g'), color); 
 
    }); 
 
    } 
 
    return css; 
 
} 
 

 
$('#result').html(paletteColor(string));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
 
<div id="result">...</div>

関連する問題