Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   удалить слово из строки (https://javascript.ru/forum/misc/7321-udalit-slovo-iz-stroki.html)

mycoding 26.01.2010 16:49

удалить слово из строки
 
Много раз возникали такие ситуации, что надо удалить из строки какое-нибуль слово, но не разу не реализовывал, чем это лучше делать регулярными выражениями или replace методом, или ещё чем
Например из следующей строки
str="dialogTitleCloseSpan image imageCloseButton dialogTitleCloseSpanOver dialogTitleCloseSpanOver";

Надо удалить dialogTitleCloseSpanOver;
Извините за такой нелепый вопрос.

Kolyaj 26.01.2010 16:54

alert(str.replace(/dialogTitleCloseSpanOver/g, ''));

e1f 26.01.2010 17:06

Kolyaj, а ничего, что
'aaa aaaa aa'.replace(/aaa/g, '')
превращается в " a aa"?
ЕМНИП, так:
'aaa aaaa aa'.replace(/\baaa\b/g, '')

Ну или так:
'aaa aaaa aa'.replace(/(^|\s)aaa(\s|$)/g, '')

Kolyaj 26.01.2010 17:07

e1f,
ничего :)

alert(str.replace(/\bdialogTitleCloseSpanOver\b/g, ''));

PeaceCoder 26.01.2010 17:09

Цитата:

Сообщение от e1f
Kolyaj, а ничего, что

вот и я сразу увидел.
ТСу надо
alert(str.replace(/(^|\s+)dialogTitleCloseSpanOver(\s+|$)/g, ' '));

e1f 26.01.2010 17:09

Kolyaj,
'1aaa aaaa aa'.replace(/\baaa\b/g, '')

Kolyaj 26.01.2010 17:33

e1f,
и что должно получиться?

PeaceCoder,
str = '111 dialogTitleCloseSpanOver dialogTitleCloseSpanOver 222';
alert(str.replace(/(^|\s+)dialogTitleCloseSpanOver(\s+|$)/g, ' '));

e1f 26.01.2010 17:45

Kolyaj, очепятка.
'!aaa aaaa aa'.replace(/\baaa\b/g, '')

Почему заменило то, что начинается с !? Для классов, которые наверняка собирается менять ТС, можно указывать так:
'a-aaa aaaa aa'.replace(/\baaa\b/g, '')

Тоже не айс.

Kolyaj 26.01.2010 17:47

Цитата:

Сообщение от e1f
Почему заменило то, что начинается с !?

А почему не должно было? Условий задачи никаких не было.

e1f 26.01.2010 17:49

Для этой задачи лучше всего подходит, имхо, то, как сделано в jQuery:
split по \s+, потом удаление тех классов, которые надо убрать, и join по ' '

e1f 26.01.2010 17:49

Kolyaj,
Цитата:

str="dialogTitleCloseSpan image imageCloseButton dialogTitleCloseSpanOver dialogTitleCloseSpanOver";
Вам это className не напоминает? ;)

PeaceCoder 26.01.2010 18:29

Цитата:

Сообщение от e1f
split по \s+, потом удаление тех классов, которые надо убрать, и join по ' '

много телодвижений
str = 'dialogTitleCloseSpanOver 111 dialogTitleCloseSpanOver dialogTitleCloseSpanOver 222 dialogTitleCloseSpanOver';
alert(str.replace(/(^|\s+)dialogTitleCloseSpanOver(?=\s+|$)/g, ''));

e1f 26.01.2010 18:40

'dialogTitleCloseSpanOver 111 dialogTitleCloseSpanOver dialogTitleCloseSpanOver 222 dialogTitleCloseSpanOver'.replace(/(^|\s+)dialogTitleCloseSpanOver(\s+|$)/g, '')


Результат:
Код:

111dialogTitleCloseSpanOver 222

PeaceCoder 26.01.2010 18:42

видимо ты попал в переправку. ща все ок

mycoding 07.02.2010 14:59

А как реализовать такой вот код.
str="ui-button ui-state-default ui-state-hover ui-state-hover ui-corner-all ui-state-hover";
 
myclass='ui-state-hover';
reg=/(^|\s+)+myclass+(?=\s+|$)/gi;
str= str.replace(reg,'');

alert(str);

Kolyaj 07.02.2010 15:16

str="ui-button ui-state-default ui-state-hover ui-state-hover ui-corner-all ui-state-hover";
  
myclass='ui-state-hover';
reg= new RegExp('(^|\\s+)' + myclass + '(?=\\s+|$)', 'gi');
str= str.replace(reg,'');
 
alert(str);

Sober_exe 27.12.2013 15:06

Могу, как альтернативу регулярки предложить такое:
var tag = 'Пенсии',
    str = 'Качество обслуживания, Пенсии, Бесы, карта';
    if(str.indexOf(tag) == 0){
        str = str.substring(tag.length +2);
    } else {
        str = str.substring(0, str.indexOf(tag) - 2) + str.substring(str.indexOf(tag) + tag.length);
    }
alert(str)


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