Простая регулярка
Еще раз всем привет.
Пробую написать простую регулярку так, чтобы попадало все, что НЕ начинается с += или = или ++ и после цифры. В общем, регулярку чтоб было сначала += или = или ++ и после цифры написал:
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, время: 02:26. |