2015-07-02 5 views
1

Если у меня есть текст, как:Regex жирным шрифтом, используя *

I need to bold *this* text and *that* text.

Мне нужно смелое это текста и этого текста.

Мне нужно преобразовать оба значения в <b>this</b> и <b>that</b>.

var str = $('textarea#commentfield').val(); 
var getBold = str.match(/\*.+\*/g); 
if(getBold!=null){ 
    getBold = getBold.toString().replace(/\*/g,""); 
} 
str = str.replace(/\*[^*]+?\*/g, "<b>"+getBold+"<\/b>"); 

Это не то, что я хочу для двух или более совпадений. Он делает это вместо:

Мне нужно смелое этот текст и что текст и этот текст и что текст.

+0

Извините, если посмотреть на слишком много вопросов, хотя строка была разделена/разложена, будет удаляться, так как не вводить в заблуждение – atmd

+1

'" Мне нужно выделить * этот * текст и * этот * текст. ". Replace (/ \ * ([^ *] +) \ */g, "$ 1") ' – epascarello

ответ

5

Вы можете просто использовать захват группы и группы ссылочный номер:

str =str.replace(/\*([^*]+)\*/g, "<b>$1<\/b>"); 
+0

@frosty Вы переназначили его на' str'? – Kasramvd

+1

Да, я забыл. nvm, он работает хорошо! – frosty

+0

@ Kasra Вам здесь не нужно. –

2

Просто использовать замыкание для отслеживания состояния тега, а вы замените каждую звезду:

function embolden(str) { 
 
    var open = false; 
 
    var ret = str.replace(/\*/g, function() { 
 
    if (open) { 
 
     open = false; 
 
     return '</b>'; 
 
    } else { 
 
     open = true; 
 
     return '<b>'; 
 
    } 
 
    }); 
 
    if (open) { 
 
    ret += '</b>'; 
 
    } 
 
    return ret; 
 
} 
 

 

 
var input = 'I need to bold *this* text and *that* text.'; 
 
document.getElementById('r').innerHTML = embolden(input);
<pre id=r></pre>

Это избавляет вас от любых странных правил экранирования, и несбалансированные теги можно легко избежать, проверив состояние перед возвратом ,

+0

Разве вы не должны устанавливать innerHTML? – epascarello

+0

@epascarello Я не уверен, что лучше работает для демонстрации (pre + textContent дает вам фактический результат). – ssube

Смежные вопросы