17.08.2012, 12:23
|
Новичок на форуме
|
|
Регистрация: 28.06.2012
Сообщений: 2
|
|
Помогите написать регулярку
Здравствуйте. Прошу помочь с регуляркой.
Есть строка типа: ........alt=1_2|176_2|175_1|.....
я ищу а есть ли в этой строке элементы с определенным индексом после подчеркивания, то есть создаю такой шаблон:
var str = '_' + (index+1) + '|'; //динамически создаваемое значение типа _2|
regex = new RegExp(str+'/');
а далее, если в этой строке есть такое вхождение(-ия), то их нужно найти и заменить на число, скажем Х
вот и я пишу
regNew = new RegExp('(\d+|alt=\d+)'+str+'/');
foundInCookie = forOpenList.match(regNew);
НО ОН УПОРНО НИЧЕГО НЕ НАХОДИТ!! Прошу помочь...
|
|
17.08.2012, 13:10
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
больше обратных слешей: \d -> \\d
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
08.05.2014, 21:28
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Не хотелось создавать новой темы, сорри за воскрешение поста, она вроде как подходит моей проблеме.
Что-то я немножечко туплю. Подскажите, как разбить строку на пробелы так, чтоб пробелы не учитывались в скобках:
'vasia(petia grisha) grisha( petia vasia) petia(vasia grisha )'
На выходе должен получиться такой массив:
['vasia(petia grisha)', 'grisha( petia vasia)', 'petia(vasia grisha )']
В голову лезут страшные решения: например, разбить строку сплитом по пробелам и в цикле воссоединить содержимое скобок. Уверен, есть решения по-адекватнее.
Спасибо.
|
|
08.05.2014, 21:59
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
var str = 'vasia(petia grisha) grisha( petia vasia) petia(vasia grisha )';
var result = str.match(/\S*?\(.*?\)/g);
Примерно так. Шаблон подправить под реально возможные варианты строки.
Последний раз редактировалось Erolast, 08.05.2014 в 22:06.
|
|
08.05.2014, 22:10
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от FINoM
|
Подскажите, как разбить строку на пробелы так, чтоб пробелы не учитывались в скобках
|
В данном случае, с точки зрения регулярных выражений, проще вытащить то, что требуется по шаблону. Например, так:
alert('vasia(petia grisha) grisha( petia vasia) petia(vasia grisha )'.match(/[^(]+\([^)]*\)/g));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 08.05.2014 в 22:13.
|
|
09.05.2014, 02:51
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Как то так. Но тут есть подводные камни.)
<script>alert(
'vasia(petia grisha) grisha( petia vasia) petia(vasia grisha )'
.split(/\s(?![^(]*\))/g)
.join('\n'));</script>
__________________
29375, 35
Последний раз редактировалось Aetae, 09.05.2014 в 02:54.
|
|
20.05.2014, 15:17
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Спасибо всем огромное.
|
|
03.09.2014, 18:03
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
С регулярками у меня всё лучше, но, порой, возникают проблемы, которые не могу понять, как решить. Нужно извлечь содержимое скобок из строки:
'(:not(.hide))'.replace( /\(([^\(\)]*)\)/, '$1' ); //":not(.hide)"
Работает верно, но, если добавить что-то перед строкой, результат будет не таким, как ожидаю:
'xxx(:not(.hide))'.replace( /.*\(([^\(\)]*)\)/, '$1' ); //".hide)"
Как извлечь содержимое скобок из второго примера?
Псевдопаттерн:
строка(содержимое)
Спасибо.
|
|
03.09.2014, 18:12
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Что-то ты мудришь :
alert(
'xxx(:not(.hide))'.replace( /^.*?\((.*)\)/, '$1' )
)
Кстати
'(:not(.hide))'.replace( /\(([^\(\)]*)\)/, '$1' ); //":not(.hide)"
вовсе не ":not(.hide)", а "(:not.hide)"
__________________
29375, 35
Последний раз редактировалось Aetae, 03.09.2014 в 18:14.
|
|
03.09.2014, 18:16
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Aetae, спасиб, не могу плюсик поставить.
Сообщение от Aetae
|
вовсе не ":not(.hide)", а "(:not.hide)"
|
Точно, перепутал регулярки, которые пробовал.
|
|
|
|