Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   поиск подстроки (https://javascript.ru/forum/misc/30834-poisk-podstroki.html)

zebulun 17.08.2012 15:58

поиск подстроки
 
Никак не вьеду, есть строка, в которой нужно найти подстроку, хранящуюся в переменной, и вырезать, проблема в том, что подстрока может выглядеть так
str

, а может так

', '+str

, т.е. запятая с пробелом может быть может не быть, пытаюсь сделать как то так
var expr = new RegExp("?(, )("+str+")/gi");

, но не могу разобраться в синтаксисе, может здесь и не нужно использовать регулярки?

Deff 17.08.2012 16:08

str=', а может так'
strOut = str.split(", ").join('')
alert('>'+strOut+'<')

zebulun 17.08.2012 16:19

так а мне нужно убрать из строки подстроку содержащую обязательно str и необязательно ', '

Deff 17.08.2012 16:34

Цитата:

Сообщение от zebulun
так а мне нужно убрать из строки подстроку содержащую обязательно str и необязательно ', '

str='str\
\
\
 , , а может так';
strOut = str.split(", ").join('').replace(/^str\s*/g,'')
alert('>'+strOut+'<')

zebulun 17.08.2012 16:49

мне ваше "а может так" нужно тоже убрать из строки(вместе с частью ", ", если она имееется)

bes 17.08.2012 17:07

var text = 'str ha ,str';
alert(text + '\n' + text.replace(/\,?str/g, 'ha'));

PS: или объясняйте подробнее и понятнее

zebulun 17.08.2012 17:43

всё почти так, только, где у вас запятая, у меня ",пробел", и если вместо символов str надо подставить переменную var str='что-то', то как это описать в регулярке?

zebulun 17.08.2012 17:47

про пробел забудьте, хотя интересно все равно

bes 17.08.2012 17:49

добавить пробел после запятой

var text = 'str ha , str';
alert(text + '\n' + text.replace(/,?\s?str/g, 'ha'));

что есть регулярное выражение - шаблон текста, всё что под этот шаблон в искомой строке находится то и возвращается (без флагов - первое совпадение с шаблоном и т.п. см. в учебнике темы по регулярке)

zebulun 17.08.2012 17:54

вы экранируете запятую?

bes 17.08.2012 18:00

Цитата:

Сообщение от zebulun
вы экранируете запятую?

я - да :) так как не мастер регулярок, экранируются специальные символы, чтобы искались обычные

Deff 17.08.2012 18:03

zebulun,
Нарисуйте пару Входных строк, вместе с остаточной входящей(в выходную строку) инфой

И к ним выходные строки

bes 17.08.2012 20:48

Цитата:

Сообщение от zebulun
и если вместо символов str надо подставить переменную var str='что-то', то как это описать в регулярке?

var text = 'bab ha , bab';
var str = 'bab';
var reg = '/,?\\s?' + str + '/g';
alert(text + '\n' + text.replace(eval(reg), 'ha'));

Только что у Deff-а научился (http://javascript.ru/forum/misc/3082...tml#post198326) и правда здесь двойное экранирование делать нужно

Deff 17.08.2012 21:10

bes,
:D Не бери сильно дурной пример, хотя он иногда спасает
Воть классика http://javascript.ru/basic/regular-e...n#obekt-regexp

var reg = new RegExp("a" + str + "15", "i")

bes 17.08.2012 21:13

ну другого способа использовать переменную в регулярном выражении пока никто не предложил, а значит твой пока лучший :)

Deff 17.08.2012 21:26

bes,
Я ж привёл пример(пост 14)
Полный вариант
var str="Чё то там....."
var pattern = "1."+str+"Да";

var regexp = new RegExp( pattern, "ig")

var Out="1,Чё то там.....Да OЙ - Вру".replace(regexp,"Воть:::");

alert(Out)

Ксать, если есть вопросительные знаки в переменной(засовываемой в pattern) их нужно всё равно экранировать типо

str=str.replace(/\?/g,"\\?");

bes 17.08.2012 22:15

Цитата:

Сообщение от Deff
bes,
Я ж привёл пример(пост 14)

чуть раньше прочитал, чем появилось исправление
всё понял, два способа: обычный в RexExp и дополнительно eval для / /


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