2013-06-06 2 views
-5

у меня есть строкаУдалить все точки струны за скобками

var string = .row-4 .col-2.grid-unit+.grid-unit+.grid-unit,.row-4 .col-3 .grid-unit .row-4 .grid-unit:nth-of-type(2n+3) .show-grid+.show-grid-reportdiv 

и мне нужно, чтобы удалить все плюс знак оставив знак плюс внутри скобок из строки с использованием JavaScript

+2

Что вы попробовали? – devnull

+0

Это не строка. И почему у вас есть точка там, для правильного селектора css это должно быть плюсом? – Bergi

+3

Я не мог найти точку внутри скобок. –

ответ

0

Используйте следующее код, и дайте мне знать, если это работает :)

var myString = ".row-4 .col-2.grid-unit+.grid-unit+.grid-unit,.row-4:nth-of-type(2n+3) .col-3 .grid-unit .row-4 .grid-unit:nth-of-type(2n+3) .show-grid+.show-grid-reportdiv"; 

var myArray = myString.split(/\(.[\(\)A-Za-z0-9-.+]*\)/); 

for(var i = 0; i < myArray.length; i++) { 
    myString = myString.replace(myArray[i], myArray[i].replace(/[+]/g,' ')); 
} 
+1

Интересный подход (который терпит неудачу на 'a (b + c) b + c', btw), но [не использовать' for in 'loop на массивах] (http://stackoverflow.com/q/500504/1048572) !!! – Bergi

+0

ах, я вижу, спасибо человеку за ** for-in ** loop :) и про неудачу, может помочь лучшее регулярное выражение. –

+0

Я не думаю, что другое регулярное выражение поможет - подход ошибочен. Но вы можете попытаться доказать свою неправоту :-) – Bergi

1

Я бы с чем-то вдоль этих линий:

var i, splits, string = ".row-4 .col-2.grid-unit+.grid-unit+.grid-unit,.row-4 .col-3 .grid-unit .row-4 .grid-unit:nth-of-type(2n+3) .show-grid+.show-grid-reportdiv"; 
splits = string.split(/(\([^)]+\))/); 
for (i = 0; i< splits.length; i++) { 
    if (splits[i].charAt(0) !== "(") { 
     splits[i] = splits[i].replace("+"," "); 
    } 
} 
string = splits.join(); 

Другим путем вокруг (Незнайка, если это лучше производительность мудрая) будет использовать следующее:

var string = ".row-4 .col-2.grid-unit+.grid-unit+.grid-unit,.row-4 .col-3 .grid-unit .row-4 .grid-unit:nth-of-type(2n+3) .show-grid+.show-grid-reportdiv"; 
function replacer (match, offset, string) { 
    var posOpen = string.indexOf("(",offset); 
    var posClose = string.indexOf(")",offset); 
    // we replace it if there are no more closing parenthesis or if there is one that is located after an opening one. 
    if (posClose === -1 || (posClose > posOpen && posOpen !== -1)) { 
     return " "; 
    } else { 
     return "+"; 
    } 
}; 
string.replace(/\+/g, replacer); 

EDIT: добавлено BERĢI предложения для более быстрого и проверить внутри цикла.

EDIT2: второе решение

+0

Да, но обратите внимание, что старые IE не поддерживают захват групп на 'split'. Кроме того, условие должно быть упрощено до 'splits [i] .charAt (0)! ==" ("'. – Bergi

+0

Истинный для этого условия, я отредактирую соответственно. Что касается браузера, я предположил, что он использует поддержку Это строка, как представляется, селектор css и браузеры, которые не поддерживают захват группы на split, также не поддерживают ': nth-of-type'. –

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