Исключение символа перед строкой (регулярное выражение)
Здравствуйте.
Нужно все слова между круглыми скобками в тексте заменить на тоже самое, только в фигурных скобках кроме строк, где есть в начале строки символ решетки #.
<script type="text/javascript">function repl() {
var text = "Строка один (тест), ещё текст (скобки)\nНовая строка (скобка)\n#Третья строка (текст в скобках)";
text = text.replace(/\((.*?)\)/gi, '{$1}');
alert(text);
}
</script>
<button onclick="repl()">click</button>
Как это сделать, подскажите? |
/\(([^#].*?)\)/g |
Sweet,
не работает:blink: |
Интересная задачка. Так как реализация регулярок в javascript не поддерживает просмотры назад, то как это сделать одним выражением, затрудняюсь. Двумя можно:
text.replace(/^(.*)$/gm, function($0, $1) {
return $0.substr(0, 1) != '#' ? $1.replace(/\((.*?)\)/g, '{$1}') : $0;
})
|
Цитата:
text.replace(/.*/g, function(x) {
return x.charAt(0) === '#' ? x : x.replace(/\((.*?)\)/g, '{$1}');
});
|
Цитата:
|
Можно использовать функцию, но это будет читерство.)
alert("Строка один (тест), ещё текст (скобки)\nНовая строка (скобка)\n#Третья строка (текст в скобках)".replace(/(?:^#.*$|\((.+?)\))/gim,function(a,b){return b?'{'+b+'}':a}))
|
Прикольный способ обойти отсутствие возможности использовать негативный просмотр назад: отбратить строку и использовать негативный просмотр вперед, а потом снова обратить.
var text = "Строка один (тест), ещё текст(скобки) здесь.\nНовая строка (скобка)\n#Третья строка (текст в скобках) и (еще) текст.";
String.prototype.reverse = function () {
return this.split('').reverse().join('');
};
alert( text.reverse().replace(/\)(.*?)\((?!.*#$)/gm, '}$1{').reverse() );
|
ваый, я просто помню, что про .substr что-то писали в справочнике. Если точно:
Цитата:
alert( Object.prototype.toString.call( [] ).slice( 8, -1 ) ); |
Можно и так, через slice.
Цитата:
|
Sweet,
substr (JavaScript 1.0) можно использовать также как innerHTML, и тот и другой используются во многих либах в.ч. и в jQuery, MooTools, Ext. Если уж что-то сломается, то у всех :D |
всем спасибо, помогло!
|
| Часовой пояс GMT +3, время: 23:45. |