2010-02-17 4 views

ответ

1

Нет, я так не думаю. По крайней мере, я подозреваю, что для любой трансформации, включающей меньше замен, я могу придумать строку, в которой ваш оригинал и предлагаемая альтернатива относятся по-разному. Однако может случиться так, что текст, с которым вы работаете, не вызовет различий, и поэтому для практических целей будет работать более короткая трансформация. Зависит от текста.

+0

Спасибо, это был очень восхитительный ответ. Мне нужно зарегистрироваться, чтобы я мог подняться! – JamesBrownIsDead

1

Вы можете упростить это немного. Вам не нужно все синтаксис диапазона

poo 
.replace(/%</g, "'<") 
.replace(/>%/g, ">'") 
.replace(/%\s*\+/g, "'+") 
.replace(/\+\s*%/g, "+'"); 
0

Так как в любом случае, замена получается только % в ' и удаляет пробелы:

var poo = 'some annoying %<string>% with some % + text + %'; 

poo = poo.replace(/%<|>%|%\s*\+|\+\s*%/g, function(match) { 
    return match.replace('%', '\'').replace(/\s/g,''); 
}); 

// "some annoying '<string>' with some ' + text + '" 

Хотя это не намного проще ...

0

Использование прогнозов и наблюдений на основе прогнозов:

var poo = poo.replace(/%(?=<)|(>)%|%\s*(?=\+)|(\+)\s*%/g, "$1$2'"); 

Использование захвата в одиночку:

var poo = poo.replace(/(>)%|(\+)\s*%|%(<)|%\s*(\+)/g, "$1$2'$3$4"); 

Если RegExp JS поддержал утверждения: 'назад

var poo = poo.replace(/%(?=<)|(?<=>)%|%\s*(?=\+)|(?<=\+)\s*%/g, "'"); 

, но это не так.

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