2013-03-20 105 views
0

我想用javascript替換文本。例如,文字是: < + ABC類> -帶HTML標籤的環繞字符

我想要的結果:

<span class="operators"> < </span><span class="operators"> + </span> 
<span class="keywords">class</span> abc <span class="operators"> > </span> 
<span class="operators"> - </span> 

芽第二替換規則的確也替換HTML標籤<和>和class屬性。 我該如何解決這個問題?

+2

我們可以看到一些代碼 – btevfik 2013-03-20 11:12:23

+2

如此,what's你的代碼到目前爲止? – 2013-03-20 11:12:39

+2

一個合適的方法是構建一個標記器,將輸入字符串拆分爲標記,然後將每個標記包裝到相應的標記(DOM元素)中。即分別處理每個部分。你可能想看看http://codemirror.net/是如何做到這一點的。 – 2013-03-20 11:13:01

回答

0

的非常簡單的例子:

var operators = ["<", "+", "-", ">"], 
    keywords = ["class"]; 

"< + class abc > -".replace(/[^ ]+/g, function(m) { 
    if (operators.indexOf(m) > -1) 
     return '<span class="operators">' + m + '</span>'; 
    else if (keywords.indexOf(m) > -1) 
     return '<span class="keywords">' + m + '</span>'; 
    return m; 
}); 

DEMO:http://jsfiddle.net/6Np26/

+0

謝謝!這是我需要的。 – user2190492 2013-03-20 14:11:38

+0

@ user2190492不客氣。點擊左側的勾號即可接受答案。 – VisioN 2013-03-20 14:15:33

+0

IE8或更早版本的Bud是不支持的indexOf方法。多麼糟糕。 – user2190492 2013-03-20 14:35:48

0

嘗試

var x = '< + class abc > -'; 
var array = x.split(/\s/); 

var ops = /^[<>+-\/]$/; 
var keywords = /^(class)$/ 

var result = []; 
for(var i = 0; i < array.length; i++){ 
    var item = array[i]; 
    if(ops.test(item)) { 
     result.push('<span class="operators"> ' + item + ' </span>') 
    } else if(keywords.test(item)){ 
     result.push('<span class="keywords"> ' + item + ' </span>') 
    } else { 
     result.push(item) 
    } 
} 

console.log(result.join(' ')) 

演示:Fiddle