2013-07-26 2 views
2

Мне нужно применить регулярное выражение для замены блока строки.Невозможно сопоставить это регулярное выражение в Javascript

это мой код:

var style = "translate(-50%, -50%) translate3d(3590px, 490px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1)"; 

style = style.replace(/translate3d\(.+\)/,"asdf"); 

Мне нужно заменить эту часть: "translate3d(3590px, 490px, 0px)" , но он не работает, потому что он заменяет до последнего «)», так что не будет: "translate(-50%, -50%) asdf"

ответ

3

. соответствует всем символам. Заставьте его пропустить закрывающие скобки:

style = style.replace(/translate3d\([^)]+\)/,"asdf"); 

пытается его:

> var style = "translate(-50%, -50%) translate3d(3590px, 490px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1)"; 
> style = style.replace(/translate3d\([^)]+\)/,"asdf"); 
'translate(-50%, -50%) asdf rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1)' 
7

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

style = style.replace(/translate3d\(.+?\)/,"asdf"); 

Собираем ? после + делает его использует самый короткий матч, а не самый длинный.

0

он заменяет до последнего ")", потому что квантор "+" является жадным по умолчанию. Вы можете изменить это, поставив "?" сразу после этого.

Правильное регулярное выражение: translate3d\(.+?\).

+0

Я думаю, вы начинаете вводить ответ, прежде чем отредактировать вопрос, потому что он избежал круглых скобок. – Barmar

+0

Разве вы не избежали его круглых скобок? (извините, если я неправильно читаю страницу ревизий, я совершенно новый для SO) Во всяком случае, вы правы, я начал набирать текст перед редактированием его вопроса. – marcv

+0

Нет, я просто исправил форматирование. Я бы никогда не изменил код в вопросе каким-либо значительным образом. История изменений не показывает этого изменения, а это означает, что в течение одной или двух минут после создания вопроса он был создан. – Barmar

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