2016-08-30 2 views
0

Как заменить пробел на символы подчеркивания в двойных брекетах?Заменить пробел с подчеркиванием внутри двойных фигурных скобок

var str = "This is my text {{an other text}} and blabla {{again again}} ..."; 

Желаемый результат:

"This is my text {{an_other_text}} and blabla {{again_again}} ..." 
+0

ужесточили формулировки. – Prune

ответ

0

var str = "This is my text {{an other text}} and blabla {{again again}}"; 
 

 
function replaceChar(str, replacement) { 
 

 
    if (typeof str !== "string" || typeof replacement !== "string") return str; 
 

 
    var pattern = /\{\{([^\}\}]+)\}\}/gi, 
 
    arr = str.match(pattern); 
 

 
    arr.map(function(match) { 
 
    str = str.replace(match, match.replace(/\s/g, replacement)); 
 
    }); 
 

 
    return str; 
 
} 
 

 
console.log(replaceChar(str, "_"));

+0

Я не думаю, что '[^ \} \}]' делает то, что вы, кажется, думаете. Между прочим, нет необходимости скрываться внутри наборов символов. –

+0

@torazaburo На самом деле я не очень разбираюсь в Regex..так бы вы не сказали мне, в чем проблема, или отредактируйте ответ, пожалуйста. Спасибо :) – DININDU

+0

Вы, кажется, думаете, что это предотвратит совпадение двойных правых фигурных скобок. Фактически, это предотвратит совпадение ** одиночной ** правой фигурной скобки, так как повторение одного и того же символа более одного раза в наборе символов не влияет. –

0

Используйте это регулярное выражение:

str.replace(/ (?=[\w\s]*}})/g, '_'); 

Это работает только, если ваш используете один из т hese [A-Za-z0-9_ ] символов в виде текста между фигурными скобками.

/(?=  # lookahead 
[\w\s]* # possible characters between braces 
}})  # until it finds }} 
/g  # replace all matches (global) 

Там нет необходимости, потому просмотра назад { не один из возможных символов.

Если вы хотите иметь более возможные символы в тексте между фигурными скобками e. г. , использовать это регулярное выражение:

str.replace(/ (?=[A-Za-z0-9_ ]*}})/g, '_'); 

Добавить , в [A-Za-z0-9_ ] =>[A-Za-z0-9_ ,]

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