Исключение символа перед строкой (регулярное выражение)
Здравствуйте.
Нужно все слова между круглыми скобками в тексте заменить на тоже самое, только в фигурных скобках кроме строк, где есть в начале строки символ решетки #. <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.
Цитата:
|
Часовой пояс GMT +3, время: 20:26. |