Простая регулярка
Еще раз всем привет.
Пробую написать простую регулярку так, чтобы попадало все, что НЕ начинается с += или = или ++ и после цифры. В общем, регулярку чтоб было сначала += или = или ++ и после цифры написал: str = prompt("sd"); re = /(?:\+\=|\=|\+\+)(?=\d)\d*/; found = str.match(re); alert(found) Нужна полностью обратная ей. Кстати, я эту правильно написал, вроде работает? |
PashPP,
Приведите пару примеров входных строк и строк в итоге |
Deff,
f = str.match(re) re = ??? str = "+=43534" f = null str = "++2323" f = "null" str = "=343434" f = null str = "dsfsdf" f = "dsfsdf" str = "=43gfvb" f = "gfvb" str = "+====+" f = "===+" |
В общем, мне это надо чтоб ввод всех значений, кроме начинающихся с ++, =, += и дальше цифры отменялся.
|
str = "=43gfvb"; alert(/^(?:\+[+=]|=)\d/.test(str) ? str : null) str = "d43gfvb"; alert(/^(?:\+[+=]|=)\d/.test(str) ? str : null) |
<pre> f = str.match(re) re = ??? str = "+=43534" f = null str = "++2323" f = "null" str = "=343434" f = null str = "dsfsdf" f = "dsfsdf" str = "=43gfvb" f = "gfvb" str = "+====+" f = "===+" </pre> <script type="text/javascript"> function TstFunc() { var a = document.getElementById('Input'); var str = a.value; var str2= str.replace(/\+?[\+=]\d*/i,'') alert(str2) } </script> <input id="Input" type="text" value="+=43534"><input type="button" value="Test" onclick="TstFunc()"> |
Aetae,
/^(?:\+[+=]|= Сорри, но не то. Кстати, может мне кто-то обьяснить простыми словами, что делает символ ^ и $ в начале и конце строк? Со справочника не сильно понял. То ли оно ищет с конца/начала, то ли еще что-то... |
Цитата:
|
PashPP,
У Aetae, Имхо правильнее он ток звездачку забыл (Поправь в моей версии var str2=str.replace(/^(?:\+[+=]|=)\d*/,'') |
Deff,
Спасибо, конечно. Но вы оба написали обратное тому, что я просил. Регулярка должна ловить все, что НЕ ловит предыдущие ваши да и моя с стартовом посте. Вот в примере с replace должно удаляться все, кроме += / ++ / == и цифры. а не наоборот. Конечно, у меня есть идеи, как это сделать и с регулярками выше, но это немного криво и мне бы чисто ради интереса и обучению регуляркам хотелось увидеть регулярку полностью обратную имеющимся. Которая должна брать все, что не похоже на +=434343. Цитата:
|
PashPP,
Цитата:
|
Цитата:
^ и $ обозначают начало и конец входной строки соответственно, а при флаге m - ещё и начало и конец подстроки входной строки, отделённой символами переноса строки. Наличие флага g на это не влияет. Примеры: alert(/^12/.test("12sddaas")); //true alert(/^12/.test("312ssddd")); //false alert(/[a-z]{2}$/.exec("312ssddd")[0]); //dd alert(/[a-z]{2}/.exec("312ssddd")[0]); //ss alert("sddaas\nsssss\n3333".match(/^[a-z]{2}/gm).join(" ")); //sd ss alert("sddaas\nsssss\n3333".match(/^[a-z]{2}/g).join(" ")); //sd alert("sddaas\nsss35\n3333".match(/\d{2}$/gm).join(" ")); //35 33 |
Цитата:
Мой пример раньше: f = str.match(re) re = ??? str = "+=43534" f = null str = "++2323" f = "null" str = "=343434" f = null str = "dsfsdf" f = "dsfsdf" str = "=43gfvb" f = "gfvb" str = "+====+" f = "===+" Ни с re = /^(?:\+[+=]|=)\d/ , ни с re = /\+?[\+=]\d*/i такого результата не будет. По сути, вы написали ту самую регулярку. что и у меня в стартовом посте /(?:\+\=|\=|\+\+)(?=\d)\d*/ только красивее. oneguy, Эм. А что означает "начало и конец входной строки"? То есть эти символы должны стоять точно первыми/последними и остальное. если есть регулярка будет хватить с серединки? |
<pre> f = str.match(re) re = ??? str = "+=43534" f = null str = "++2323" f = "null" str = "=343434" f = null str = "dsfsdf" f = "dsfsdf" str = "=43gfvb" f = "gfvb" str = "+====+" f = "===+" </pre> <script type="text/javascript"> function TstFunc() { var a = document.getElementById('Input'); var str = a.value; var str2= str.replace(/(\+?[\+=]\d*)/i,'') var str2=RegExp["$1"] alert(str2) } </script> <input id="Input" type="text" value="+=43534"><input type="button" value="Test" onclick="TstFunc()"> |
PashPP,
А может не удалять гланды через жопу и не использовать match где он не нужен? |
Цитата:
|
Deff,
Хм. Спасибо за пример. Aetae, Как человек не сведущий в медицине и жопах, не смогу ответить. Но почему мне интересно именно то, что интересно, не зависимо от результата и вообще способа применения я уже писал. Просто хотел увидеть как строить регулярки обратные данной. |
oneguy,
Хм. Что-то уже догадываюсь, но... Текущий индекс чего? |
Регулярка обратная данной это: /^(?:[^+][^+=]|[^=])\D+/ .
Только она вам не поможет в случае с match и приведёнными примерами. Как ни старайся, а пинцетом гвоздь не забьёшь. |
Aetae,
Спасибо. |
Цитата:
Это такая внутренняя переменная при выполнении регулярного подвыражения, обозначающая позицию во входной строке, где закончилось выполнение предыдущего подвыражения, и начнётся выполнение следующего. Например, /\d2$/.test("12") Вначале текущий индекс равен 0, так как нет флага g. После выполнения подвыражения \d текущий индекс будет 1, после выполнения 2 - равен 2, поэтому перед выполнением $ текущий индекс равен 2, то есть длине строки, и это $ проходит. |
oneguy,
Кажется, что понял. Спасибо. |
Часовой пояс GMT +3, время: 00:50. |