Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить часть строки(с меня баланс :) (https://javascript.ru/forum/misc/43413-udalit-chast-stroki-s-menya-balans.html)

Boomerml 04.12.2013 13:53

Удалить часть строки(с меня баланс :)
 
Добрый день гуру!

в переменной возможны такие варианты.

1Вариант. - (#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#
2Вариант. - #144357# && #14827# && (#24174#||#22301#||#22298#)

В идеале нужно удалить то что в скобках(с скобками включительно) и как бы внешний '&&'. т.е. чтобы осталось (если сделайте номер в лс)

1Вариант. - #14827# && #14543#
2Вариант. - #144357# && #14827#
*Подмечу их может быть много в конечном варианте - #144357# && #14827# && #18234# && #12324#

Или хотяб

1Вариант - && #14827# && #14543#
2Вариант. - #144357# && #14827# &&

Как я понимаю нужны спецсимволы в регулярном выражении которые я ещё к сожалению не освоил :( .
Спасибо за понимание! Очень жду оперативный ответ :)

Boomerml 04.12.2013 13:55

Нашёл какое то подобие в сети, но это не то что нужно... Может поймёте куда приблизительно копать...


Дело в том что внутри скобок могут быть и другие значения (пос.), (д.) и т.п.
s = "Санкт-Петербург(г.)"
"Санкт-Петербург(г.)"
s.replace(/\s*\([а-яА-Я\.]+\)$/g, "")
"Санкт-Петербург"

рони 04.12.2013 14:02

Boomerml,
var str = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#'
   reg = /[^#]+\(.*?\)|\(.*?\)[^#]+/
   str = str.replace(reg,'');
   alert(str);
   str = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
   str = str.replace(reg,'');
   alert(str);

Boomerml 04.12.2013 14:14

Цитата:

Сообщение от рони (Сообщение 284483)
Boomerml,
var str = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#'
   reg = /[^#]+\(.*?\)|\(.*?\)[^#]+/
   str = str.replace(reg,'');
   alert(str);
   str = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
   str = str.replace(reg,'');
   alert(str);

Спасибо. Работает за маленьким исключением. Код такая вешь, не проверишь не поймёшь, тут 3 вариант события после каких то действий...

var str = '(#24174#||#22301#||#22298#||#22303#)'

Чтоб он и на этот вариант распространился... Ну если мельком в голову нечего не придёт, поставлю условия...

ksa 04.12.2013 14:18

Предложу такой вариант...

var str='(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#';
alert(str.replace(/([^#]*)?\(.+\)([^#]*)?/g,''));
str = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
alert(str.replace(/([^#]*)?\(.+\)([^#]*)?/g,''));

рони 04.12.2013 14:19

Boomerml,
var str = '(#24174#||#22301#||#22298#||#22303#)'
что на выходе должно быть ?

ksa 04.12.2013 14:21

Цитата:

Сообщение от Boomerml
var str = '(#24174#||#22301#||#22298#||#22303#)'

Это должно стать пустой строкой?
Мой вариант так может. :yes:

var str = '(#24174#||#22301#||#22298#||#22303#)';
alert('>'+str.replace(/([^#]*)?\(.+\)([^#]*)?/g,'')+'<');

ksa 04.12.2013 14:22

Цитата:

Сообщение от Boomerml
В идеале нужно удалить то что в скобках(с скобками включительно) и как бы внешний '&&'.

Цитата:

Сообщение от рони
что на выходе должно быть ?

Думаю, что пустая строка...

рони 04.12.2013 14:26

var str = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#'
   reg = /(^|[^#]+)\(.*?\)$|\(.*?\)[^#]+/
   str = str.replace(reg,'');
   alert(str);
   str = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
   str = str.replace(reg,'');
   alert(str);
   str = '(#24174#||#22301#||#22298#||#22303#)';
   str = str.replace(reg,'');
   alert(str);

Boomerml 04.12.2013 14:28

Цитата:

Сообщение от ksa (Сообщение 284490)
Думаю, что пустая строка...

+ Кул

Теперь даже не знаю что делать :) Хотяяя :) допишу компоненту. Если вопросов не будет, то пополам! там немного осталось. остальное в лс.

Спасибо что откликнулись)

ksa 04.12.2013 14:38

Цитата:

Сообщение от Boomerml
Теперь даже не знаю что делать
...
пополам

Не мелочись... :D

Boomerml 04.12.2013 14:44

Цитата:

Сообщение от рони (Сообщение 284492)
var str = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#'
   reg = /(^|[^#]+)\(.*?\)$|\(.*?\)[^#]+/
   str = str.replace(reg,'');
   alert(str);
   str = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
   str = str.replace(reg,'');
   alert(str);
   str = '(#24174#||#22301#||#22298#||#22303#)';
   str = str.replace(reg,'');
   alert(str);

Всё таки все достанется тебе!
щюпал код дальше
ksa спасибо, но все отдам рони :)
было ещё одно разногласие

str = '#14827# && (#24174#||#22301#||#22298#||#22303#) && #13002#';


вывод ksa '#13002##14827# && (#24174#||#22301#||#22298#||#22303#)'
а нужно:
вывод рони '#13002# && (#24174#||#22301#||#22298#||#22303#) && #14827#'

Обоим ещё раз человеческое спасибо) рони жди прибавление :)

ksa 04.12.2013 14:59

Цитата:

Сообщение от Boomerml
все отдам рони

Ясно... :D

Boomerml 05.12.2013 09:47

Появилась ещё задача...

str = '#14827# && (#24174#||#22301#||#22298#||#22303#) && #13002#';

Нужно забрать то что в скобках в переменную к примеру в переменную tt чтоб был результат.. (не пинайте если вопрос чайника :)
alert(tt);// #24174#||#22301#||#22298#||#22303#

Ещё мне нужно условие присутствия скобок... правильно я понимаю нужна функци
indexOf('(')

рони 05.12.2013 10:14

Boomerml,
var str = '#14827# && (#24174#||#22301#||#22298#||#22303#) && #13002#',
    tt = str.match(/\((.*?)\)/);
    tt = tt ? tt[1] : '';
    alert(tt)

Arramis 05.12.2013 11:51

оцените мой вариант без регулярок плиз

var str1 = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#',

	str2 = '#144357# && #14827# && (#24174#||#22301#||#22298#)';
	
	result1 = str1.slice( str1.indexOf('&&') ).replace('&&', '');
	
	result2 = str2.slice( str2.indexOf(str2[0] || '#'), str2.indexOf('(') - 4 );
   	
    alert(result1);
	
    alert(result2);

рони 05.12.2013 12:03

Arramis,
а кто будет определять это строка вида str1 или str2 и ещё какая?

Arramis 05.12.2013 12:18

Цитата:

Сообщение от рони (Сообщение 284674)
Arramis,
а кто будет определять это строка вида str1 или str2 и ещё какая?

насколько я понял, исходя из формулировки задачи вид строки не нужно проверять, разве нет ? помоему мой вариант сработает для любых строк вида str1 и str2.

рони 05.12.2013 12:29

Цитата:

Сообщение от Arramis
мой вариант сработает для любых строк вида str1 и str2.

:-?
var str2 = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#',
	result2 = str2.slice( str2.indexOf(str2[0] || '#'), str2.indexOf('(') - 4 );
    alert(result2);

Arramis 05.12.2013 12:33

Цитата:

Сообщение от рони (Сообщение 284677)
:-?
var str2 = '(#24174#||#22301#||#22298#||#22303#) && #14827# && #14543#',
	result2 = str2.slice( str2.indexOf(str2[0] || '#'), str2.indexOf('(') - 4 );
    alert(result2);

ну окей окей. Типа без регулярок никак чтоли ?

ksa 05.12.2013 13:17

Цитата:

Сообщение от Arramis
Типа без регулярок никак чтоли ?

Зачем сложно если можно просто? :D
Или вера не позволяет?

Arramis 05.12.2013 13:32

Цитата:

Сообщение от ksa (Сообщение 284697)
Зачем сложно если можно просто? :D
Или вера не позволяет?

вера позволяет, регулярные выражение не тривиальная штука. Просто, будет как раз , если их не использовать где попало.

ksa 05.12.2013 13:36

Цитата:

Сообщение от Arramis
регулярные выражение не тривиальная штука

Так тебя ими уже вооружили...

Да и на форуме этом практически всегда помогают в их составлении. Тем паче, что ты даже какие-то деньги за это предлагаешь...

Boomerml 05.12.2013 14:15

Цитата:

Сообщение от рони (Сообщение 284663)
Boomerml,
var str = '#14827# && (#24174#||#22301#||#22298#||#22303#) && #13002#',
    tt = str.match(/\((.*?)\)/);
    tt = tt ? tt[1] : '';
    alert(tt)

++ Благодарю. Компоненту дописал, это был фильтр точнее писал для slaider'a fix :) очень спас меня регулярками...


Часовой пояс GMT +3, время: 02:30.