Javascript.RU

RegExp

Создание

// полная форма записи
var expr = new RegExp(pattern [, flags]);
 
// сокращенная форма записи (литеральный формат)
var expr = /pattern/flags;

Аргументы

pattern
Шаблон поиска (текст регулярного выражения).
flags
Способы поиска по шаблону:

  • g — глобальный поиск (обрабатываются все совпадения с шаблоном поиска);
  • i — не различать строчные и заглавные буквы;
  • m — многострочный поиск.

Порядок указания флагов не имеет значения.


Описание, примеры

Когда регулярное выражение создается при помощи конструктора new RegExp(…), необходимо помнить, что обратные слеши (\) должны экранироваться, например:

var expr = new RegExp('\\w', 'ig');

При использовании литерального формата, этого делать не нужно:

var expr = /\w/gi;

Обе записи эквивалентны. Первый вариант может понадобится, если вам придется генерировать регулярное выражение динамически.

Виды символов

В регулярных выражениях различают следующие виды символов:

Обычные символы

  • A..z — английские буквы от A до z, строчные и заглавные;
  • 0..9 — цифры;
  • { } — фигурные скобки, кроме случаев, когда они составляют группу вида {n,m} (где n и m — числа) и её вариации;
  • = — равно;
  • < — меньше;
  • > — больше;
  • - — минус;
  • , — запятая;
  • и др.
Специальные символы
  • ( ) — круглые скобки;
  • [ ] — квадратные скобки;
  • \ — обраный слеш;
  • . — точка;
  • ^ — степень;
  • $ — знак доллара;
  • | — вертикальная черта;
  • ? — вопросительный знак;
  • + — плюс.

Формирование регулярного выражения

При формировании шаблона поиска используется близкий к классическому PCRE синтаксис.

Спецсимволы в регулярном выражении

Свернуть/Развернуть таблицу

Символ Значение
\ Для обычных символов - делает их специальными. Например, выражение /s/ ищет просто символ 's'. А если поставить \ перед s, то /\s/ уже обозначает пробельный символ.И наоборот, если символ специальный, например *, то \ сделает его просто обычным символом "звездочка". Например, /a*/ ищет 0 или больше подряд идущих символов 'a'. Чтобы найти а со звездочкой 'a*' - поставим \ перед спец. символом: /a\*/.
^ Обозначает начало входных данных. Если установлен флаг многострочного поиска ("m"), то также сработает при начале новой строки.Например, /^A/ не найдет 'A' в "an A", но найдет первое 'A' в "An A."
$ Обозначает конец входных данных. Если установлен флаг многострочного поиска, то также сработает в конце строки.Например, /t$/ не найдет 't' в "eater", но найдет - в "eat".
* Обозначает повторение 0 или более раз. Например, /bo*/ найдет 'boooo' в "A ghost booooed" и 'b' в "A bird warbled", но ничего не найдет в "A goat grunted".
+ Обозначает повторение 1 или более раз. Эквивалентно {1,}. Например, /a+/ найдет 'a' в "candy" и все 'a' в "caaaaaaandy".
? Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, /e?le?/ найдет 'el' в "angel" и 'le' в "angle."Если используется сразу после одного из квантификаторов *, +, ?, или {}, то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит.Кроме того, ? используется в предпросмотре, который описан в таблице под (?=), (?!), и (?: ).
. (Десятичная точка) обозначает любой символ, кроме перевода строки: \n \r \u2028 or \u2029. (можно использовать [\s\S] для поиска любого символа, включая переводы строк). Например, /.n/ найдет 'an' и 'on' в "nay, an apple is on the tree", но не 'nay'.
(x) Находит x и запоминает. Это называется "запоминающие скобки". Например, /(foo)/ найдет и запомнит 'foo' в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp: $1, ..., $9.Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз.
(?:x) Находит x, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн.
x(?=y) Находит x, только если за x следует y. Например, /Jack(?=Sprat)/ найдет 'Jack', только если за ним следует 'Sprat'. /Jack(?=Sprat|Frost)/ найдет 'Jack', только если за ним следует 'Sprat' или 'Frost'. Однако, ни 'Sprat' ни 'Frost' не войдут в результат поиска.
x(?!y) Находит x, только если за x не следует y. Например, /\d+(?!\.)/ найдет число, только если за ним не следует десятичная точка. /\d+(?!\.)/.exec("3.141") найдет 141, но не 3.141.
x|y Находит x или y. Например, /green|red/ найдет 'green' в "green apple" и 'red' в "red apple."
{n} Где n - положительное целое число. Находит ровно n повторений предшествующего элемента. Например, /a{2}/ не найдет 'a' в "candy," но найдет оба a в "caandy," и первые два a в "caaandy."
{n,} Где n - положительное целое число. Находит n и более повторений элемента. Например, /a{2,} не найдет 'a' в "candy", но найдет все 'a' в "caandy" и в "caaaaaaandy."
{n,m} Где n и m - положительные целые числа. Находят от n до m повторений элемента.
[xyz] Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, [abcd] - то же самое, что [a-d]. Найдет 'b' в "brisket" и 'c' в "ache".
[^xyz] Любой символ, кроме указанных в наборе. Вы также можете указать промежуток. Например, [^abc] - то же самое, что [^a-c]. Найдет 'r' в "brisket" и 'h' в "chop."
[\b] Находит символ backspace. (Не путать с \b.)
\b Находит границу слов (латинских), например пробел. (Не путать с [\b]). Например, /\bn\w/ найдет 'no' в "noonday"; /\wy\b/ найдет 'ly' в "possibly yesterday."
\B Обозначает не границу слов. Например, /\w\Bn/ найдет 'on' в "noonday", а /y\B\w/ найдет 'ye' в "possibly yesterday."
\cX Где X - буква от A до Z. Обозначает контрольный символ в строке. Например, /\cM/ обозначает символ Ctrl-M.
\d находит цифру из любого алфавита (у нас же юникод). Используйте [0-9], чтобы найти только обычные цифры. Например, /\d/ или /[0-9]/ найдет '2' в "B2 is the suite number."
\D Найдет нецифровой символ (все алфавиты). [^0-9] - эквивалент для обычных цифр. Например, /\D/ или /[^0-9]/ найдет 'B' в "B2 is the suite number."
\f,\r,\n Соответствующие спецсимволы form-feed, line-feed, перевод строки.
\s Найдет любой пробельный символ, включая пробел, табуляцию, переводы строки и другие юникодные пробельные символы. Например, /\s\w*/ найдет ' bar' в "foo bar."
\S Найдет любой символ, кроме пробельного. Например, /\S\w*/ найдет 'foo' в "foo bar."
\t Символ табуляции.
\v Символ вертикальной табуляции.
\w Найдет любой словесный (латинский алфавит) символ, включая буквы, цифры и знак подчеркивания. Эквивалентно [A-Za-z0-9_]. Например, /\w/ найдет 'a' в "apple," '5' в "$5.28," и '3' в "3D."
\W Найдет любой не-(лат.)словесный символ. Эквивалентно [^A-Za-z0-9_]. Например, /\W/ и /[^$A-Za-z0-9_]/ одинаково найдут '%' в "50%."
\n где n - целое число. Обратная ссылка на n-ю запомненную скобками подстроку. Например, /apple(,)\sorange\1/ найдет 'apple, orange,' в "apple, orange, cherry, peach.". За таблицей есть более полный пример.
\0 Найдет символ NUL. Не добавляйте в конец другие цифры.
\xhh Найдет символ с кодом hh (2 шестнадцатиричных цифры)
\uhhhh Найдет символ с кодом hhhh (4 шестнадцатиричных цифры).
Пример: изменение формата строки
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
alert(newstr); // "Smith, John"

Методы

toString
test
exec

Свойства

global
ignoreCase
multiline
lastIndex
source

См. также


Автор: hex.style (не зарегистрирован), дата: 4 декабря, 2009 - 20:09
#permalink

Изложено все подробно. Отдельное спасибо автору!

Есть вопрос! Как вставлять переменную в регулярное выражение?

Хочу реализовать нормальный поиск по классам для случая, когда элементу приписано 2 класса одновременно. Необходимо представить strClassName в виде отдельного слова.

function getElementsByClassName( strClassName, obj ) {
    if ( obj.className.match(/\strClassName\b/) ) {
        aryClassElements[aryClassElements.length] = obj;
    }
    for ( var i = 0; i < obj.childNodes.length; i++ )
        getElementsByClassName( strClassName , obj.childNodes[i] );
}

Автор: RE_, дата: 23 августа, 2010 - 12:46
#permalink

>Как вставлять переменную в регулярное выражение?
формируйте регулярное выражение в виде строковой переменной. Содержимое переменной должно быть без слешей


Автор: Гость1 (не зарегистрирован), дата: 20 ноября, 2013 - 11:57
#permalink

А пример можно?


Автор: KOLANICH, дата: 19 февраля, 2010 - 23:03
#permalink
alert(rl.test(l.name)+"\n"+rl.test(l.name)+"\n"+rl.test(l.name));

l удоволетворяет выражению rl
выводит

true
false
true
почему и что делать


Автор: Гость (не зарегистрирован), дата: 2 августа, 2010 - 17:36
#permalink

АГА! Я тоже наступил.

В случае если

var rl = /abc/ig;
alert(rl.test(l.name)+"\n"+rl.test(l.name)+"\n"+rl.test(l.name));

выводит как и у вас.
А если
var rl = new RegExp( "abc", "ig");
тогда все обрабатывается правильно. Видино нужно как-то резетить встроенный регексп...


Автор: Гость (не зарегистрирован), дата: 19 апреля, 2010 - 20:38
#permalink

В js-обьекте match использовал регулярное выражение, удачно используемое в php-функции preg_match() для проверки адреса почты. Детально проверил по данной инструкции, поигрался с упрощением... кажется всё в норме, но почемуто выдаёт null... Вот, собственно сам пример, полный вариант и упрощённый:

this.value.match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/");
this.value.match("/\w+@\w+\.[a-z]{2,3}/");

this.value точно присутствует: this - фоле формы
Не подскажете, в чём проблема?


Автор: B@rmaley.e><e, дата: 19 апреля, 2010 - 21:29
#permalink

В JS есть встроенный тип RegExp.

this.value.match(/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/);
this.value.match(/\w+@\w+\.[a-z]{2,3}/);

Автор: Гость (не зарегистрирован), дата: 8 июля, 2010 - 16:34
#permalink

Или
var re = new RegExp ('[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}')
var re = new RegExp ('\w+@\w+\.[a-z]{2,3}')
т.е. без слешей, обозначающих границы регулярного выражения.
Только что убил на это час :-)


Автор: B@rmaley.e><e, дата: 8 июля, 2010 - 20:27
#permalink

А еще слеши нужно экранировать.


Автор: Гость (не зарегистрирован), дата: 20 августа, 2010 - 10:57
#permalink

Уже домены появились .info, .aero и т.п.
поэтому лучше {2,3} заменить на {2,4}


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2010 - 23:38
#permalink

ага, а еще есть .travel

а уменя адрес, вообще dima@localhost.localdomain


Автор: Гость (не зарегистрирован), дата: 7 февраля, 2012 - 18:18
#permalink

Правильно использовать {2,}, а еще бывают домены первого уровня (напр в интранетах)


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2011 - 17:13
#permalink

Двойные кавычки в начале и в конце не нужны!


Автор: skAmZ (не зарегистрирован), дата: 4 сентября, 2010 - 20:05
#permalink

Уже домены появились .info, .aero и т.п.
поэтому лучше {2,3} заменить на {2,4}


Автор: o0 (не зарегистрирован), дата: 14 октября, 2010 - 14:53
#permalink

Closure Compiler заменяет "new RegExp()" на "RegExp()".
Влияет ли это хоть как-то на скорость выполнения?.
Если да - на сколько? Если нет - какой смысл писать "new..." ?


Автор: Гость (не зарегистрирован), дата: 19 ноября, 2010 - 15:37
#permalink

вы юзаете /i, /gi и т.п., но ничего о них не пишете
вы не находите что неплохо бы добавить их описание ?
или для них здесь есть отдельная страничка ? - тогда киньте ссылку


Автор: Aetae, дата: 19 ноября, 2010 - 19:23
#permalink

А если ещё раз внимательно посмотреть в начало статьи?)


Автор: Гость (не зарегистрирован), дата: 2 декабря, 2010 - 16:02
#permalink

А как подсчитать количество совпадений?


Автор: Гость (не зарегистрирован), дата: 5 февраля, 2011 - 23:25
#permalink

Ошибочка?
Обозначает повторение 0 или более раз. Например, /bo*/ найдет 'boooo' в "A ghost booooed" и 'b' в "A bird warbled", но ничего не найдет в "A goat grunted".


Автор: Гость (не зарегистрирован), дата: 9 марта, 2011 - 20:34
#permalink

Есть строка "math.sin()" Нужно находить только sin и только тогда когда пред ним math. а после (

(?:math\.)\w+(?:\() находит math.sin( подскажите где ошибка.


Автор: Гость (не зарегистрирован), дата: 28 марта, 2011 - 00:59
#permalink

(^math)sin(?=\()


Автор: Гость (не зарегистрирован), дата: 28 марта, 2011 - 01:00
#permalink

ой вернее
(^(math\.))sin(?=\))


Автор: jite (не зарегистрирован), дата: 19 марта, 2011 - 21:41
#permalink

Так и должно быть.
/bo*/ означает "b" и за ним "o" 0...бескон. раз.
Условию удовлетворяют:
- "A ghost booooed"
- "A bird warbled"


Автор: Researcher, дата: 23 марта, 2011 - 15:54
#permalink
function example(value) { 
   return (/^abc$/gi).test(value); 
}
alert(example("abc") + ", " + example("abc"));

вот такая штука везде кроме фф3 выдает true, true, а в нем - true, false.
по какой-то неведомой причине фф3 считает, что при повторном вызове функции можно использовать ссылку на старый объект регулярки, а не создавать новый. если изменить конструкцию на new RegExp, то все нормально становится.


Автор: allergencore, дата: 28 марта, 2011 - 14:19
#permalink

Товарищ, у вас наверняка IE. Избавляйтесь по-скорее. На эту тему против дрочеров мелкософта даже своя фича есть: "ИЕ - лучший браузер... только для того, чтобы скачать другой". Что я посоветую

  1. opera
  2. firefox

Хром не стану советовать, потому что жаба-интерпретатор в нем однозначно гребнутый. А на оперу не гоните, очень удобная маза - opera dragonfly, верестать довольно удобно, а еще удобней при написании жабы для уже готовых сайтов. А саму жабу - по старинке - блокнот

З.Ы. лично у меня при

function example(value) { 
   return (/^abc$/gi).test(value); 
}
alert(example("фф3") + ", " + example("фф3"));     //выдает false,false

Автор: Researcher, дата: 30 марта, 2011 - 23:41
#permalink

Спасибо, конечно, за совет )
Только, когда я что-нибудь пишу, возникает необходимость, чтобы работало все одинакого у всех. В этом и состояла проблема (собственно, это и не проблема, т.к. решена уже, и причем написано про это в том же моем посте).
И ваш пример отличается от моего. Он, конечно, будет false выдавать независимо от того, один и тот же объект регулярки используется или разные.

Собственно, ответ на то, почему так, я уже нашел на этом же сайте.
http://javascript.ru/tutorial/regexp-specials#staticheskie-svoystva
раньше просто этого не заметил


Автор: Гость (не зарегистрирован), дата: 18 апреля, 2011 - 10:43
#permalink

Кто-то знает что обозначает значок '$&' в результате замены с помощью регулярок?


Автор: Валерка (не зарегистрирован), дата: 23 мая, 2011 - 11:25
#permalink

В спецсимволах явно * не хватает


Автор: Гость (не зарегистрирован), дата: 26 мая, 2011 - 15:26
#permalink

Подскажите, правильно ли делаю: нужно найти все выражения(именно с точкой):
.2009
2009.

(^(\.))2009
2009(?=\.)

Правильно ли я делаю, а то он все с 2009 ищет, не взирая на точку...


Автор: Гость (не зарегистрирован), дата: 7 ноября, 2011 - 17:25
#permalink

(?:\.2009|2009\.)
лучше так..
если два поиска нужно - то
\.2009
2009\.

если сойдёт и третий вариант (без точек)
то можно сократить до: \.?2009\.?
тогда поймает и 11.02.2009 и 2009.03.08 и 21200908

не надо злоупотреблять скобками и символами, смысла которых не поняли
в частности (^(\.)) - означает найти в начале строки точку и поместить её в переменные $1 и $2


Автор: Гость (не зарегистрирован), дата: 1 июня, 2011 - 13:46
#permalink

вопрос:
как отфильтровать все латинские, все нелатинские буквы?


Автор: Гость (не зарегистрирован), дата: 1 июня, 2011 - 14:01
#permalink

/w*/ - фильтрует и латиницу и кирилицу
как отфильтровать только латиницу ?


Автор: Sweet, дата: 2 июня, 2011 - 09:35
#permalink
var test = "Кириллица test";
alert( test.match(/\w+/) );

Как видно, \w ищет только латинские символы.


Автор: Гость, дата: 1 июня, 2011 - 14:36
#permalink

/^[a-zA-Z0-9]+$/


Автор: Сергей N (не зарегистрирован), дата: 8 июля, 2011 - 23:28
#permalink

А можно как-то при замене сразу работать с результатами поиска ?

Пример задачи: в HTML-коде все имена тегов перевести в UPCASE.


Автор: Алекс_ (не зарегистрирован), дата: 29 июля, 2011 - 12:54
#permalink

Добрый день
Осваиваю JScript, который во много похож на JavaScript. Изучаю в среде Windows Vista.
Необходимо, в пути из локальной сети «\\сервер\папка\папка\файл.jpg» заменить обратные слэши на прямые, чтобы в результате получить: «//сервер/папка/папка/файл.jpg»
Прочитал кучу брошюр по replace и RegExp с метасимволами и модификаторами, и кучу ссылок в Инете, ничего пока адекватно не заработало.
Пробовал многими способами, один из них:

var part = /\\/g; // заменяет только один символ \ на один /, как и выражение /\\+/g
var FilePath = '\\сервер\папка\папка\файл.jpg'.replace(new RegExp(part), '/');

Результат «/серверпапкапапкафайл.jpg»
Или:

var part = /\\*/g;
var FilePath = '\\сервер\папка\папка\файл.jpg'.replace(new RegExp(part), '/');

Даёт результат: «//с/е/р/в/е/р/п/а/п/к/а/п/а/п/к/а/ф/а/й/л/./j/p/g»
Может, у кого имеется готовая заготовка на этот случай?
Спасибо


Автор: Lblss (не зарегистрирован), дата: 3 октября, 2011 - 23:58
#permalink

Все верно, символ \ является служебным. Пример (в консоли файрбага):

>>> var a='\\сервер\папка\папка\файл.jpg';
undefined
>>> a
"\серверпапкапапкафайл.jpg"

Таким образом, к обработке принимается только единственный первый обратный слеш. Для правильной обработки обратные слеши должны быть двойными в исходной строке.


Автор: Гость (не зарегистрирован), дата: 26 октября, 2011 - 16:50
#permalink

Грамотная статья. Основные сведения изложены в лаконичной и понятной форме. Спасибо.


Автор: Гость (не зарегистрирован), дата: 16 ноября, 2011 - 12:53
#permalink

Можно добавить что для экранирования в RexExp, когда используешь обычную строку, нужно использовать два слеша.


Автор: devote, дата: 5 декабря, 2011 - 09:59
#permalink

К регулярным выражениям, это никак не относиться, если пишете скрипты, то должны знать основы языка.


Автор: ИгорьБ (не зарегистрирован), дата: 22 декабря, 2011 - 12:40
#permalink

Как в javascript в паттерне регулярного выражения использовать переменную?
Напимер
var q="3";
var pattern=/q/; - q - значение переменой


Автор: Гость (не зарегистрирован), дата: 9 января, 2012 - 19:21
#permalink

Подскажите пожалуйсто что я делаю не так???

<form action="/1.php" method="post" name="smart" id="smart">
<select name="Dest" id="Dest" class="Validate_Required"   >
<option value="||-">-</option>
<option value="7||А">А</option>
<option value="5||М">М</option>
<option selected="selected" value="4||Смарт">Смарт</option>
<option value="1||С">С</option>
<option value="2||Ц">Ц</option>
<option value="6||Ци">Ад</option>
<option value="8||Пр">Пр</option>
<option value="10||HW">HW</option>
<option value="3||под">под</option>
<option value="9||Тес">Тест</option>
</select>
</form>
<script type="text/javascript">
if ( document.forms["smart"].Dest.value.match(/\d\|\|/) == '4||' ) {
document.forms["smart"].submit();
};
</script>

Автор: hard-t, дата: 9 февраля, 2012 - 11:55
#permalink

У меня два вопроса.
Первый:
Есть ли реализация для смотрящих вперед и назад выражений("(?=)" и "(?<=)")?
Второй
Расскажите пожалуйста поподробнее про работу конструкции "(?:)".

Благодарю за внимание.


Автор: GJ (не зарегистрирован), дата: 25 апреля, 2013 - 15:52
#permalink

"Смотрящих вперед" есть. "Смотрящих назад" нет. Особенность JS.RegExp... =(
Мне один раз из-за этого пришлось полмодуля переделывать на ... =C

(?: ... ) - в начале подгруппы (скобок) можно написать "?:" и тогда результат, если можно так сказать, подзапроса просто не записывается в "capturing groups".
Логично, если вы не собираетесь где-то использовать его через "\1".."\9" - что память занимать лишний раз. =)


Автор: across, дата: 30 августа, 2012 - 21:19
#permalink

В начале статьи ошибка - "обраный" слэш


Автор: Гость (не зарегистрирован), дата: 26 сентября, 2012 - 19:12
#permalink

Как разрешить ввод только кириллицы пробелов и дефисов?


Автор: Гость (не зарегистрирован), дата: 18 октября, 2012 - 10:03
#permalink

Просто хочется сказать огромное СПАСИБО автору статьи, да и вообще сайта — с их помощью разобрался в чужом коде и regexp-ax? хотя раньше JavaScript в глаза не видел.
СПАСИБО!!!


Автор: Гость (не зарегистрирован), дата: 17 ноября, 2012 - 01:39
#permalink

Есть строка "math.sin()" Нужно находить только sin и только тогда когда пред ним math.

(?:math\.)\w+ находит math.sin подскажите где ошибка.


Автор: Гость (не зарегистрирован), дата: 17 ноября, 2012 - 01:52
#permalink

Пробовал как в википедии: (?<=math\.)\w+ тогда браузер пишет ошибку
Uncaught exception: SyntaxError: RegExp constructor: invalid regular expression


Автор: Гость (не зарегистрирован), дата: 20 ноября, 2012 - 09:05
#permalink

помогите пожалуйста! есть страничка с 3 текстовыми полями ИФО нужна проверка на заполненность окна и с проверкой что записано все только русскими буквами. я написала проверку заполненности но не поняла регулярные выражения( помогите пожалуйста.

function but1(b)
{

document.form.Act.value=b.name;
s = document.forms["form"]["second_name"].value;
f = document.forms["form"]["first_name"].value;
m=document.forms["form"]["middle_name"].value;
// Проверяем поля на заполненность
if (s.length==0)
{
document.getElementById("second_name").innerHTML="*поле Имя обязательно для заполнения";
return false;
}
else
{
if (f.length==0)
{
document.getElementById("first_name").innerHTML="*поле Фамилия обязательно для заполнения";
return false;
}
else
{
if (m.length==0)
{
document.getElementById("middle_name").innerHTML="*поле Отчество обязательно для заполнения";
return false;
}
else
{
confirm('Вы уверены?')
{
document.form.submit();
}
}
}
}
}


Автор: Гость (не зарегистрирован), дата: 19 января, 2013 - 04:48
#permalink

есть два выражения, назовем их X и Y
как найти Y при условии что перед ним не идет X?
т.е. "[^X]Y" но при этом рассматривать X и Y именно как выражения или строки, а не отдельные символы.


Автор: Гость (не зарегистрирован), дата: 28 января, 2013 - 10:59
#permalink

Доброго времени суток, уважаемые специалисты.
Впервые столкнулся с регэкспами... Пока обходился без него, но жизнь заставила).
Не могу сформировать шиблон для задачи:
Нужно проверить, подходит ли строка под шаблон ЧИСЛО.ЧИСЛО
На данный момент додумался вот до этого:

1	function CheckChain(Chain){
2	var validRegExp = /^(([0-9\-])+\.)+([0-9]{1,2})+$/;
3	var rslt = Chain.match(validRegExp);
4	return rslt;}

Работает, но есть 2 НО:
1) ошибка при выполнении, если Chain=Null (не оч. критично)
2) под шаблон попадают также значения типа ЧИСЛО.ЧИСЛО.ЧИСЛО.ЧИСЛО (1.2.17.56), что неправильно.
Подскажите, пожалуйста, где я не прав, и как должен выглядеть шаблон. Буду благодарен за пояснения.
Заранее благодарю всех откликнувшихся.


Автор: Гость (не зарегистрирован), дата: 30 января, 2013 - 12:34
#permalink

я бы сделал просто:

function CheckChain(Chain){
  var validRegExp = /^[0-9]+\.[0-9]+$/;
  var rslt = validRegExp.exec(Chain);
  if(rslt){return rslt[0];}else{return -1;}
}

Естественно вы можете возвращать null если вам это нужно или любое другое значение, если регексп не выполнился, т.е. значение Chain под него не подошло.
Ваша главная ошибка в плюсе после \.)+
+ - означает что выражение (в вашем случае в скобках) должно встретится 1 и более раз.


Автор: Гость (не зарегистрирован), дата: 30 января, 2013 - 12:39
#permalink

ну и конечно же

var validRegExp = /^-?[0-9]+\.[0-9]+$/;

- если вам нужны отрицательные числа. В данном случае -? означает что знак минус может встретится 1 раз или отсутствовать.


Автор: Гость (не зарегистрирован), дата: 31 января, 2013 - 09:47
#permalink

Большое спасибо за ответ. Сейчас попробую реализовать. По результату отпишусь. Отрицательные числа не нужны.


Автор: Гость (не зарегистрирован), дата: 31 января, 2013 - 16:32
#permalink

Все отлично, все работает. Все суперррр)


Автор: АК (не зарегистрирован), дата: 7 апреля, 2013 - 20:40
#permalink

Вопрос:
как получить последнее вхождение в строке?


Автор: Vnr, дата: 6 января, 2014 - 21:47
#permalink
var s = 'раз два три';
var res = s.match(/\S+/g);
var last_res = res[res.length - 1];
alert(last_res);

Автор: Гость (не зарегистрирован), дата: 26 августа, 2013 - 10:35
#permalink

Добрый день!
Скажите, есть ли возможность задать содержимому объекта RegExp определенный CSS стиль?


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2013 - 16:06
#permalink

Вопрос не понятен, RegExp объект - это шаблон для поиска в строке, при чем тут CSS стиль? Если вы имеете в виду могут ли регулярные выражения содержать стили, то да, они могут содержать любой текст.


Автор: Гость (не зарегистрирован), дата: 26 мая, 2014 - 14:44
#permalink

Прочитала вашу статью и все равно не помогло справится с regxp .
Есть var temp= ^\\s*-?[0-9]\\d*(\\.\\d{1,2})?\\s*$
Может кто подскажет какой regxp добавить чтобы проверить пробел в начале и конце?


Автор: salexseen, дата: 26 мая, 2014 - 16:27
#permalink

Попробуйте так
var temp = new RegExp('^\\s+-?[0-9]\\d*(\\.\\d{1,2})?\\s+$');

Нужно было заменить \\s* на \\s+


Автор: Гость (не зарегистрирован), дата: 9 июня, 2014 - 11:04
#permalink

Спасибо, помогло !).


Автор: Гость (не зарегистрирован), дата: 22 июля, 2014 - 12:05
#permalink

Привет, еще раз. Работаю на большом проекте, боюсь аффектнет половину платежей. Добавить в RegExp валидацию на -, значит выпилить "-? "

var temp = new RegExp('^\\s+-?[0-9]\\d*(\\.\\d{1,2})?\\s+$');


Автор: Гость (не зарегистрирован), дата: 23 июля, 2014 - 11:44
#permalink

да, символ ? значит, что знак перед ? может встречаться один либо 0 раз. Т.е использую конструкцию -?, у вас будет возможность 1 раз ввести -. Удалив ее вы не сможете вводить отрицательные значения.


Автор: Artod (не зарегистрирован), дата: 30 мая, 2014 - 13:59
#permalink

Еще такие спецсимволы не указаны (?<=y)x и (? аналоги x(?=y) и x(?!y) только наоборот.


Автор: krasovsky, дата: 28 октября, 2014 - 14:22
#permalink

Подскажите плз, как правильно пользоваться незапоминающими скобками
Легенда такая: найти нужно некую последовательность символов(имя), после известной последовательности(Madam), которая нам не нужна

rg = new RegExp('(?:Madam) (.+)','i');//наивно надеясь что Madam не попадет в результат, а все после попадет пишем такой регэксп
rg.exec('Madam Pompadur'); //["Madam Pompadur", "Pompadur"] получаем такой результат - в результат записалось и то что хотели запомнить и то что не хотели

вопрос в следующем, как записать что бы получить только ["Pompadur"] ?


Автор: Гость (не зарегистрирован), дата: 29 мая, 2015 - 18:47
#permalink

можно обойтись без "незапоминающих скобок":

var rg = /(^Madam )/i;
console.log ('Madam Pompadur'.replace(rg, ''));


Автор: Tormozz, дата: 19 сентября, 2015 - 14:52
#permalink

Текст набран шрифтом "Font". В нем встречаются слова, в которых один из символов набран другим шрифтом ("NewFont"). Как найти эти слова и составить из них словарь (массив)? Спасибо.


Автор: ДмитрийИ (не зарегистрирован), дата: 14 октября, 2015 - 12:25
#permalink

Прикольно читать статью по регэкспу, где полбуквы рвёт результат в клочья, с несоблюдением простенького русского правила тся-ться. Школота в комментариях не в счёт


Автор: weber, дата: 4 ноября, 2015 - 18:54
#permalink

Всем привет, подскажите пожалуйста такой момент, для валидации полей написал регулярку, которая должна запрещать введение некоторых спецсимволов

^[^\\\/:*?\"<gt;|]*$

с этой задачей справляется, но мне нужно еще запретить вводить пробел в пустую строку. То есть слова с пробелами допустимы, но просто пробел без других символов нет. Пробовал по разному писать это правило, но не срабатывает. В лучшем случае удается вообще запретить пробелы.


Автор: Филя (не зарегистрирован), дата: 21 октября, 2017 - 12:33
#permalink

будте аккуратны

/^a|b/.exec('zb')

удачно найдет b

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

/^(a|b)/

Автор: CRLF (не зарегистрирован), дата: 23 ноября, 2017 - 04:48
#permalink

Объясните поведение метасимвола ^ в многострочном режиме m

Имеется файл с пустыми строками в ANSI кодировке со стандартными символами переноса строки и возврата каретки

txt = 'CRLF
CRLF
CRLF
CRLF
CRLF'

var str = txt.match(/^/mg);
alert(str.length);//Выведет 11

Если удалить \n или \r

txt = 'LF
LF
LF
LF
LF'

var str = txt.match(/^/mg);
alert(str.length);//Выведет 6

Аналогичное поведение если ищем конец строки в многострочном режиме.
Подозреваю, что в многострочном режиме для универсальности \n и \r равнозначно принимаются за конец и начало строки поэтому результат в первом случае в два раза больше.

Где подробнее почитать, как с флагом /m вычисляется, что считать началом ^, а что концом строки $?


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 00:03
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 14:27
#permalink

Автор: Gabriel45 (не зарегистрирован), дата: 28 августа, 2022 - 06:41
#permalink

Regex are patterns used for find/replace rather than individual strings. Powerful string processing tool for PHP and JavaScript...phoodle


Автор: wardrose7 (не зарегистрирован), дата: 5 октября, 2022 - 09:41
#permalink

If you are interested in popular online games then surely the name cookie clicker will be a prominent name. Cookie clicker is known to be an online clicker game suitable for all ages and offers a great user experience. Coming to the game, you will be immersed in the vivid graphic world of the items that you will be interestingly exploited. Surely this will be a great choice for times when you need to relax.


Автор: allanpetter (не зарегистрирован), дата: 25 октября, 2022 - 13:17
#permalink

Автор: Гость (не зарегистрирован), дата: 2 ноября, 2022 - 09:18
#permalink

I just started reading your post. It's excellent and fascinating. This website really impresses me, and I eagerly await your next weaver game article. Please keep upholding.


Автор: fghr (не зарегистрирован), дата: 24 февраля, 2023 - 09:55
#permalink

Fantastic article. In my opinion, this is one of the very best posts that has ever been published. Your work is outstanding, and it motivates me to do better. Please accept my sincere gratitude. gacha life


Автор: fghr (не зарегистрирован), дата: 24 февраля, 2023 - 09:55
#permalink

Fantastic article. In my opinion, this is one of the very best posts that has ever been published. Your work is outstanding, and it motivates me to do better. Please accept my sincere gratitude. gacha life


Автор: orby gun (не зарегистрирован), дата: 20 апреля, 2023 - 13:15
#permalink

we will see if it could different next time orby gun


Автор: gun (не зарегистрирован), дата: 20 апреля, 2023 - 13:16
#permalink

we will see if it could different next time orby gun


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum