Javascript.RU

Регулярные выражения

Регулярные выражения в javascript имеют особую краткую форму и стандартный PCRE-синтаксис.

Работают они через специальный объект RegExp.

Кроме того, у строк есть свои методы search,match,replace, но чтобы их понять - разберем-таки сначала RegExp.

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

/pattern/флаги
new RegExp("pattern"[, флаги])

pattern - регулярное выражение для поиска (о замене - позже), а флаги - строка из любой комбинации символов g(глобальный поиск), i(регистр неважен) и m(многострочный поиск).

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

var reg = /ab+c/i
var reg = new RegExp("ab+c", "i")

При втором вызове - т.к регулярное выражение в кавычках, то нужно дублировать \

// эквивалентны
re = new RegExp("\\w+")
re = /\w+/

При поиске можно использовать большинство возможностей современного 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", а также 'a' и '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 шестнадцатиричных цифры).

Чтобы просто проверить, подходит ли строка под регулярное выражение, используется метод test:

if ( /\s/.test("строка") ) {
...В строке есть пробелы!...
}

Метод test начинает поиск, начиная со свойства lastIndex объекта RegExp, если оно установлено.

Метод exec возвращает массив и ставит свойства регулярного выражения.
Если совпадений нет, то возвращается null.

Например,

// Найти одну d, за которой следует 1 или более b, за которыми одна d
// Запомнить найденные b и следующую за ними d
// Регистронезависимый поиск
var myRe = /d(b+)(d)/ig;
var myArray = myRe.exec("cdbBdbsbz");

В результате выполнения скрипта будут такие результаты:

Объект Свойство/Индекс Описания Пример
myArray Содержимое myArray. ["dbBd", "bB", "d"]
index Индекс совпадения (от 0) 1
input Исходная строка. cdbBdbsbz
[0] Последние совпавшие символы dbBd
[1], ...[n] Совпадения во вложенных скобках, если есть. Число вложенных скобок не ограничено. [1] = bB
[2] = d
myRe lastIndex Индекс, с которого начинать следующий поиск. 5
ignoreCase Показывает, что был включен регистронезависимый поиск, флаг "i". true
global Показывает, что был включен флаг "g" поиска всех совпадений. true
multiline Показывает, был ли включен флаг многострочного поиска "m". false
source Текст паттерна. d(b+)(d)

Если в регулярном выражении включен флаг "g", Вы можете вызывать метод exec много раз для поиска последовательных совпадений в той же строке. Когда Вы это делаете, поиск начинается на подстроке str, с индекса lastIndex. Например, вот такой скрипт:

var myRe = /ab*/g;
var str = "abbcdefabh";
while ((myArray = myRe.exec(str)) != null) {
	var msg = "Found " + myArray[0] + ".  ";
	msg += "Next match starts at " + myRe.lastIndex;
	print(msg);
}

Этот скрипт выведет следующий текст:

Found abb. Next match starts at 3
Found ab. Next match starts at 9

В следующем примере функция выполняет поиск по input. Затем делается цикл по массиву, чтобы посмотреть, есть ли другие имена.

Предполагается, что все зарегистрированные имена находятся в массиве А:

var A = ["Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick",
         "Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick",
         "Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"];

function lookup(input)
{
  var firstName = /\w+/i.exec(input);
  if (!firstName)
  {
    print(input + " isn't a name!");
    return;
  }

  var count = 0;
  for (var i = 0; i < A.length; i++)
  {
    if (firstName[0].toLowerCase() == A[i].toLowerCase())
      count++;
  }
  var midstring = (count == 1) ? " other has " : " others have ";
  print("Thanks, " + count + midstring + "the same name!")
}

Следующие методы работают с регулярными выражениями из строк.

Все методы, кроме replace, можно вызывать как с объектами типа regexp в аргументах, так и со строками, которые автоматом преобразуются в объекты RegExp.

Так что вызовы эквивалентны:

var i = str.search(/\s/)
var i = str.search("\\s")

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

var regText = "\\s"
var i = str.search(new RegExp(regText, "g"))

Возвращает индекс регулярного выражения в строке, или -1.

Если Вы хотите знать, подходит ли строка под регулярное выражение, используйте метод search(аналогично RegExp-методы test). Чтобы получить больше информации, используйте более медленный метод match(аналогичный методу RegExp exec).

Этот пример выводит сообщение, в зависимости от того, подходит ли строка под регулярное выражение.

function testinput(re, str){
   if (str.search(re) != -1)
      midstring = " contains ";
   else
      midstring = " does not contain ";
   document.write (str + midstring + re.source);
}

Если в regexp нет флага g, то возвращает тот же результат, что regexp.exec(string).

Если в regexp есть флаг g, то возвращает массив со всеми совпадениями.

Чтобы просто узнать, подходит ли строка под регулярное выражение regexp, используйте regexp.test(string).

Если Вы хотите получить первый результат - попробуйте regexp.exec(string).

В следующем примере match используется, чтобы найти "Chapter", за которой следует 1 или более цифр, а затем цифры, разделенные точкой. В регулярном выражении есть флаг i, так что регистр будет игнорироваться.

str = "For more information, see Chapter 3.4.5.1";
re = /chapter (\d+(\.\d)*)/i;
found = str.match(re);
alert(found);

Скрипт выдаст массив из совпадений:

  • Chapter 3.4.5.1 - полностью совпавшая строка
  • 3.4.5.1 - первая скобка
  • .1 - внутренняя скобка

Следующий пример демонстрирует использование флагов глобального и регистронезависимого поиска с match. Будут найдены все буквы от А до Е и от а до е, каждая - в отдельном элементе массива.

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches = str.match(regexp);
document.write(matches);

// matches = ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

Метод replace может заменять вхождения регулярного выражения не только на строку, но и на результат выполнения функции. Его полный синтаксис - такой:

var newString = str.replace(regexp/substr, newSubStr/function)
regexp
Объект RegExp. Его вхождения будут заменены на значение, которое вернет параметр номер 2
substr
Строка, которая будет заменена на newSubStr.
newSubStr
Строка, которая заменяет подстроку из аргумента номер 1.
function
Функция, которая может быть вызвана для генерации новой подстроки (чтобы подставить ее вместо подстроки, полученной из аргумента 1).

Метод replace не меняет строку, на которой вызван, а просто возвращает новую, измененную строку.

Чтобы осуществить глобальную замену, включите в регулярное выражение флаг "g".

Если первый аргумент - строка, то она не преобразуется в регулярное выражение, так что, например,

var ab = "a b".replace("\\s","..") // = "a b"

Вызов replace оставил строку без изменения, т.к искал не регулярное выражение \s, а строку "\s".

В строке замены могут быть такие спецсимволы:

Pattern Inserts
$$ Вставляет "$".
$& Вставляет найденную подстроку.
$` Вставляет часть строки, которая предшествует найденному вхождению.
$' Вставляет часть строки, которая идет после найденного вхождения.
$n or $nn Где n или nn - десятичные цифры, вставляет подстроку вхождения, запомненную n-й вложенной скобкой, если первый аргумент - объект RegExp.

Если Вы указываете вторым параметром функцию, то она выполняется при каждом совпадении.

В функции можно динамически генерировать и возвращать строку подстановки.

Первый параметр функции - найденная подстрока. Если первым аргументом replace является объект RegExp, то следующие n параметров содержат совпадения из вложенных скобок. Последние два параметра - позиция в строке, на которой произошло совпадение и сама строка.

Например, следующий вызов replace возвратит XXzzzz - XX , zzzz.

function replacer(str, p1, p2, offset, s)
{
return str + " - " + p1 + " , " + p2;
}
var newString = "XXzzzz".replace(/(X*)(z*)/, replacer)

Как видите, тут две скобки в регулярном выражении, и потому в функции два параметра p1, p2.
Если бы были три скобки, то в функцию пришлось бы добавить параметр p3.

Следующая функция заменяет слова типа borderTop на border-top:

function styleHyphenFormat(propertyName)
{
  function upperToHyphenLower(match)
  {
    return '-' + match.toLowerCase();
  }
  return propertyName.replace(/[A-Z]/, upperToHyphenLower);
}

В некоторых реализациях javascript регэкспы, заданные коротким синтаксисом /.../ - статичны. То есть, такой объект создается один раз в некоторых реализациях JS, например в Firefox. В Chrome все ок.

function f() {
  // при многократных заходах в функцию объект один и тот же
  var re = /lalala/     
}

По стандарту эта возможность разрешена ES3, но запрещена ES5.

Из-за того, что lastIndex при глобальном поиске меняется, а сам объект регэкспа статичен, первый поиск увеличивает lastIndex, а последующие - продолжают искать со старого lastIndex, т.е. могут возвращать не все результаты.

При поиске всех совпадений в цикле проблем не возникает, т.к. последняя итерация (неудачная) обнуляет lastIndex.

Для общего понимания регулярных выражений можно почитать Статью в wikipedia.

Более подробно они описаны в книге (англ.) Beginning Regular Expressions.


Автор: KOLANICH, дата: 23 ноября, 2008 - 00:52
#permalink

\/-это косая черта?


Автор: Илья Кантор, дата: 23 ноября, 2008 - 09:24
#permalink

Это косая черта "/", внутри регекспа /.../ она экранируется бэкслешем "\".
Например, регексп только для косой черты выглядит вот так: /\//


Автор: Вася Да Винчи (не зарегистрирован), дата: 25 августа, 2011 - 10:39
#permalink

\/ - значит виндетта!)

(сорри за флуд)


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

вЕндетта


Автор: Гость (не зарегистрирован), дата: 29 июня, 2012 - 16:07
#permalink

Не вЕндетта, а вИндетта, проверочное слово Windows


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

лролролрол


Автор: Тёмик (не зарегистрирован), дата: 27 декабря, 2008 - 01:41
#permalink

Помогите пожалуйста!

В переменной str находятся несколько слов, разделённых между собой пробелом. Нужно записать в массив myArray только те из них, которые начинаются с a и заканчиваются на b. Т.е. что-то вроде:

var str = 'ab aa acb abc acdcdcdb'
var myRe = /текст паттерна/gi
var myArray = myRe.exec(str);

В результате должно получиться:

myArray[0] = 'ab'
myArray[1] = 'acb'
myArray[2] = 'acdcdcdb'

Вопрос: что писать в тексте паттерна?


Автор: Minh (не зарегистрирован), дата: 20 мая, 2009 - 10:32
#permalink

Если пользуетесь exec, то вам понадобится цикл, думаю лучше использовать match в вашем случае, можно например так:

var str = 'ab aa acb abc acdcdcdb'
var myRe = /\ba\w*b\b/gi
document.write(str.match(myRe))


Автор: ОуКБ (не зарегистрирован), дата: 13 февраля, 2014 - 09:08
#permalink

ОуКБ


Автор: aldan8, дата: 21 сентября, 2009 - 01:48
#permalink

Или ещё с таким патерном:

var pat = /a(\w)*b(\s|\0)/g
var str = "ab aa acb abc acdcdcdb sdabxx abxxxxxb abyyyyy"
var arrRes = str.match(pat)
for(var i = 0; i<arrRes.length; i++)
   document.write(arrRes[i] + ' <br />')

Автор: MainBuh (не зарегистрирован), дата: 30 июля, 2010 - 14:16
#permalink

Извините, что постоянно повторяюсь но просто вы "изобрели столько велосипедов", а про стандартную функцию объекта String забыли!!!
var arr = 'ab aa acb abc acdcdcdb'.split(' ');


Автор: growler, дата: 5 августа, 2012 - 20:34
#permalink

тю. а чего не так?

var str = 'ab aa acb abc acdcdcdb';
var myRe = /a\w*b/gi;
var myArray = [];
var res;
while((res = myRe.exec(str)) != null) {
    myArray.push(res[0]);
}
console.log(myArray);

Автор: Гость (не зарегистрирован), дата: 27 декабря, 2008 - 22:00
#permalink

Разбей на массив эту строку, как explode в php, и потом ^a*b$


Автор: Тёмик (не зарегистрирован), дата: 28 декабря, 2008 - 00:10
#permalink

Не пойму зачем на массив разбивать? Смысл?

Ну. допустим. разбил - не фурычит! В качестве результата ничего не выдаёт.

Я с JS знаком всего-лишь немногим больше недели. Можно всё немного поподробней объяснить? Даже лучше исходник скрипта готовый выложи.


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2008 - 19:33
#permalink

Как ты разбил? Что за вопросы насчёт "смысла" ? Тебе в итоге же массив и нужен, тогда какие оправдания чем этот способ не устаивает?
Надеюсь пробелы выкинул? Найди аналог phpшного explode, если не знаешь как правильно организовать. PHP JS тебе в лапы.
Потом в цикле for пробегаешься по массиву (не ищи в манах ссылок вида & и прочего php-дерьма, в JS массив СРАЗУ передаётся по жёсткой ссылке), если регексп не удовлетворяет - удаляешь его нахрен из массива. Вот и всё готово, в массиве останется только то что нужно. Исходник некогда ваять, время $$$.


Автор: latteo (не зарегистрирован), дата: 2 января, 2009 - 19:59
#permalink

Подскажите нубу через что можно поиск по всей странице сделать, пробовал через вариации win.document.getElementByTag('body').innerHTML не хочет Sad


Автор: latteo, дата: 3 января, 2009 - 01:08
#permalink

Ура научился document.body.innerHTML помог и статья http://javascript.ru/start/dom/intro


Автор: Se_Pe (не зарегистрирован), дата: 19 марта, 2009 - 15:12
#permalink

Подскажите, почему если в примере:

...
var newString = "XXzzzz".replace(/(X*)(z*)/, replacer)

заменить строку XXzzzz на например aaaXXzzzz, то того же результата не получиться. И что нужно написать в паттерне, чтоб получить тот же результат, что и в первом случае?


Автор: RC (не зарегистрирован), дата: 23 августа, 2009 - 21:45
#permalink

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

var newString = "XXzzzz".replace(/.*(X*)(z*)/, replacer)

то должно помочь.


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

а как быть если нужно заменить расширение допустим albom/123123.jpeg jpeg на html


Автор: [email protected]><e (не зарегистрирован), дата: 6 мая, 2009 - 12:59
#permalink
'albom/123123.jpeg'.replace(/\.jpeg$/i,'.html');

Автор: Alekson, дата: 7 июля, 2009 - 15:43
#permalink

Как сделать просмотр назад?
?<= и ?#n не работают.


Автор: Илья Кантор, дата: 7 июля, 2009 - 22:22
#permalink

Попробуйте \\1


Автор: orange, дата: 22 января, 2010 - 00:16
#permalink

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


Автор: orange, дата: 22 января, 2010 - 00:46
#permalink

да и вообще, есть ли просмотр назад в ECMAScript v 3? В книге Дэвида Флэнагана(JS подробное руководство, 5 изд) написано следующее:

11.1.7. Средства регулярных выражений Perl, не поддерживаемые в JavaScript
Мы говорили, что ECMAScript v3 определяет относительно полное подмножество средств регулярных выражений из Perl 5. Развитые средства Perl, не поддерживаемые ECMAScript, включают следующее:
• флаги s (однострочный режим) и x (расширенный синтаксис);
• управляющие последовательности \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z и \G;
• (?<= – положительное условие на предыдущие символы и отрицатель
ное условие на предыдущие символы;
• комментарий (?# и прочий расширенный синтаксис (?.


Автор: mister_maxim, дата: 4 апреля, 2011 - 16:45
#permalink

Действительно - очень обидно что нет непоглощающего поиска назад Sad
это фундаментальная с моей точки зрения понятие.
Например, я бы не хотел бы включать в результат нахождения то, что было нужно для проверки идущего до самого нахождения, и это очень кстати при замене replace.
А вообще я хотел бы чтобы replace было не только для строки нахождения $0, но и для каждого кармана в отдельности: от $0 и до $n, т.е. чтобы кроме параметра строки замены в методе replace, были строки замены для каждого кармана.


Автор: Михаил_новичок (не зарегистрирован), дата: 7 августа, 2011 - 04:50
#permalink

Как я понимаю - восновном, такие задачи используются для поиска по внешним страницам, то есть открывать их придется PHP, или ему подобными. Там эти средства включены и работают на ура. А если поиск по внутренней странице - можно лучше подогнать регэксп, так как известно больше информации...


Автор: jed (не зарегистрирован), дата: 7 октября, 2009 - 01:13
#permalink

Начал эксперементировать с примером разбора "3.4.5.1"

text = "Chapter 3.4.5.1";
regex = /chapter (?Sad\d)(\.\d)?(\.\d)?(\.\d)?)/i;
result = text.match(regex);
result[0] = '';
Log("result = " + result);

Показывает: result = ,3,.4,.5,.1
Как раз то, что надо - каждая цифра отделено.

regex = /chapter (\d)((\.\d)+)/i;
Показывает: result = ,3,.4.5.1,.1
Это неудача - первая цифра отдельно, остальные вместе .4.5.1

Вопрос: как изменить второй regex, чтобы он выдавал как первый, но был без этих повторов (\.\d)?(\.\d)?(\.\d)?


Автор: MainBuh (не зарегистрирован), дата: 30 июля, 2010 - 14:11
#permalink

arrRez = "Chapter 3.4.5.1".replace(/[^\d\.]/g,'').split('.');


Автор: jed (не зарегистрирован), дата: 7 октября, 2009 - 01:15
#permalink
text = "Chapter 3.4.5.1";
  regex = /chapter (?:(\d)(\.\d)?(\.\d)?(\.\d)?)/i;
  result = text.match(regex);
  result[0] = '';
  Log("result = " + result);

Автор: subzey (не зарегистрирован), дата: 5 ноября, 2009 - 18:50
#permalink

[xyz] Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире

Ох, не тире, а дефис. Хотя и употребляется в смысле «тире».


Автор: Ыфьфдлщ (не зарегистрирован), дата: 20 ноября, 2009 - 01:52
#permalink

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

вот приблизительно строка

Kuzyаааaj456 dfdf наградил федю

надо разделить строку на 2 части до наградил и после
при этом Kuzyаааaj456 dfdf может состоять из Nго количества слов, букв, и содержать любые символы (лат\нелат\цифры\спецсимволы)


Автор: Гость (не зарегистрирован), дата: 21 ноября, 2009 - 11:24
#permalink

/(.+?) наградил (.+?)/


Автор: Ыфьфдлщ (не зарегистрирован), дата: 22 ноября, 2009 - 22:42
#permalink

спасибо но чет непомогло первая переменная отобразилась верно а от второй одна буква (


Автор: ATr (не зарегистрирован), дата: 23 ноября, 2009 - 16:59
#permalink

/^(.+?) наградил (.+?)$/


Автор: Гость (не зарегистрирован), дата: 8 декабря, 2009 - 21:54
#permalink

написано чтобы напомнить но никак не объяснить. Оценка 2


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

+1
Человеку, первый раз встречающемуся с регулярными выражениями, очень тяжело понять по этой статье, как же их надо использовать


Автор: Илья Кантор, дата: 13 марта, 2010 - 03:38
#permalink

Эта статья ни в коей мере не ставит целью научить регулярным выражениям. Скорее она для тех, кто уже знает, что такое регэкспы и изучает их работу с ними в javascript.


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

Для тех кто хочет научится писать хорошие популярные статьи:
1. в начале статьи приводится Аннотация ( в которой кратко приводится как содержание статьи, так и характеристика потенциальной читательской аудитории)
2. в конце статьи приводится списки использованной и рекомендуемой литературы (для рекомендуемой литературы ссылки на википедию и мануалы - не катят, хотя в использованной литературе могут быть приведены)
3. совсем шикарно, если рекомендованная (не использованная, а, именно, рекомендуемая) литература снабжена аннотацией
4. для всего списка литературы приводится язык и год издания


Автор: Астра (не зарегистрирован), дата: 22 декабря, 2009 - 21:10
#permalink

не могу въехать в "запоминающие скобки" (вроде, куда уж проще)
Мне нужно из страницы выбрать и запомнить определенные числа (положительные и отрицательные) . Посоветовали воспользоваться match, а числа обрамить псевдотегами. вот какой паттен в итоге получился:

var rates = data.match(/<!--comRate-->(-?\d+)<!--\/comRate-->/g);

но когда проверяю alert (rates); массив выдает вместе с псевдотегами (типа 1, -1)
где я ошиблась


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

*блин, комменты ушли
но когда проверяю alert (rates); массив выдает вместе с псевдотегами (типа

<!--comRate-->1<!--/comRate-->, <!--comRate-->-1<!--/comRate-->

)


Автор: subzey, дата: 23 декабря, 2009 - 01:23
#permalink

В результирующем массиве содержимое скобок находится начиная с индекса 1.

Например:

var a = /\s*(+7|8)[\s\-\(]+(\d{3})[\s\-\)]+(\d{3})[-\s]+(\d{2})[-\s]+(\d{2})\s*/.exec(" +7 (901) 234 56 78 ");
a[0]; /*  +7 (901) 234 56 78  */
a[1]; /* +7 */
a[2]; /* 901 */
a[3]; /* 234 */
a[4]; /* 56 */
a[5]; /* 78 */
a[6]; /* undefined */

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

При использовании функции копирование в буфер - не сохраняются переводы каретки


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

var a = /\s*(+7|8)[\s\-\(]+(\d{3})[\s\-\)]+(\d{3})[-\s]+(\d{2})[-\s]+(\d{2})\s*/.exec(" +7 (901) 234 56 78 ");

пздц массив, это какой маньяк писал? это же полный пиздец не понятно нихера


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

Объясните разницу между [0-9] и \d
В коде ниже [0-9] и \d дают разные результаты, true и fasle соответственно.
Кодировка файла utf-8

var pattern = new RegExp('^[0-9]{7,8}$');
var str='1234567';
alert(pattern.test(str));

Автор: Илья Кантор, дата: 29 декабря, 2009 - 19:58
#permalink

Никакой. Но не забываем экранировать, раз уж используем кавычки:

var pattern = new RegExp('^\\d{7,8}$');
...

Автор: bga, дата: 8 января, 2010 - 17:54
#permalink

вот еще полезный метод для оптимизации регулярных выражений RegExp.compile


Автор: Ц52 (не зарегистрирован), дата: 23 января, 2010 - 17:24
#permalink

Вот тут смотрю ваше руководство
Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, [abcd] - то же самое, что [a-d]. Найдет 'b' в "brisket" и 'c' в "ache".

Очень не понятно почему 'c' в "ache" . Сначала проверил а - английская (подумал что русская сначала). Потом зашел http://www.pcre.ru/eval/ и проверил там. Выдает результат поиска:
0: (a)
1: (c)
Т.е. найдет и а и c. Вопрос так почему будет c?


Автор: tuschkan, дата: 23 февраля, 2010 - 15:19
#permalink

Задача состоит в том, чтобы проверять вводимое значении на соответствие шаблону 4 цифры/2 цифры или тоже самое без"/" (номер дома через дробь: 457/5) или просто номер дома.

У меня такое выражение:\d{1,4}\/\d{1,2}|\d{1,4}
но оно допускает и буквы и точки и прочие знаки. Подскажите, пожалуйста, как мне разрешить только цифры и косую?


Автор: Ivan1024 (не зарегистрирован), дата: 24 апреля, 2011 - 20:00
#permalink

вот так
/^\d{1,4}(\/\d{1,2})?$/


Автор: T0xA (не зарегистрирован), дата: 4 марта, 2010 - 04:08
#permalink

подскажите пожалуйста

var myRe = /(.*)\.(.*)/;
myRe.exec('el1.el2');

возвращает: el1.el2,el1,el2

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


Автор: immeasurability (не зарегистрирован), дата: 12 марта, 2010 - 16:21
#permalink

подскажите пжз!

есть выражение replace(/(\[.*\])/gi,'xxx') которое меняет все что находится в скобках на xxx что дописать в эту часть /(\[.*\])/gi для того чтобы менялось все что в скобках и один любой символ с лева?

к примеру есть текст www-[yyy]-zzz нужно чтоб все что в скобках и знак минус был заменен -[yyy], но с лева может быть не только знак минус но и любой другой символ!

Спасибо за внимание!!!


Автор: sshishov, дата: 29 ноября, 2010 - 02:46
#permalink

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

/(.\[.*\])/gi

Автор: EugenyK, дата: 8 апреля, 2010 - 21:33
#permalink

Я так понимаю, что в javascript в отличии от php PCRE, чтобы точка "." обозначала точку в операторе альтернативы [], её следует экранировать?


Автор: Rem (не зарегистрирован), дата: 23 апреля, 2010 - 22:19
#permalink

Вопрос по теме. Думаю, и другим будет полезен. Помогите ПОНЯТЬ.
В чате (на аяксе) есть функция замены длинных слов (многие пишут, игнорируя пробелы). Вот она:

var text = msg.replace(/(.[^\s\<\>]{15})/gi,
  "$1\n");

Работает, но.. как?
Что значат здесь знаки больше/меньше с регеспами?


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

Прочто спасибо))))


Автор: mosf1k (не зарегистрирован), дата: 13 июля, 2010 - 15:33
#permalink

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


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

Есть строка состоящая из натуральных чисел, разделенная ","
надо преобразовать в массив.
Пример (работает), если мы знаем размерность массива
var a = /(\d+)[\,](\d+)[\,](\d+)[\,](\d+)/.exec("10,150,0,1230");
alert("a[0] = " + a[0]+'\n'+
"a[1] = " + a[1]+'\n'+
"a[2] = " + a[2]+'\n'+
"a[3] = " + a[3]+'\n'+
"a[4] = " + a[4]
);

Если мы не знаем размерности массива (числа натуральных строк в строке)
Пример (типа) (НЕ РАБОТАЕТ):
var a = /(\d+)[[\,](\d+)]*/.exec("10,150,0,1230,11,1234");
Можно ли обойтись без дополнительного цикла (только регулярным выражением)?



Автор: MainBuh (не зарегистрирован), дата: 30 июля, 2010 - 13:39
#permalink

А так уже нельзя var arr="10,150,0,1230,11,1234".split(',');


Автор: Ivan1024 (не зарегистрирован), дата: 24 апреля, 2011 - 20:45
#permalink

"10,150,0,1230".match( /\d+/g )


Автор: Ranerg, дата: 15 августа, 2012 - 10:30
#permalink

зачем ты внутри квадратных скобок записываешь символы в escape-последовательности, когда внутри этих скобок они принимают символьный вид и без косой черты?


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

Существует ли разница при работе регулярного выражения с английскими и русскими буквами?

Что-то русские буквы не ищутся..


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

Есть.
[A-Za-z] -промежуток с латинскими буквами
[А-Яа-я] - c русскими


Автор: Гость (не зарегистрирован), дата: 1 августа, 2011 - 23:03
#permalink

>Есть.
>[A-Za-z] -промежуток с латинскими буквами
>[А-Яа-я] - c русскими

Я бы сказал что с русскими так:

[а-яА-ЯёЁ]


Автор: Increazon, дата: 13 сентября, 2010 - 20:26
#permalink

Есть строка:

Москва <a href="http://a.ru">лучше</a> Питера

Как с помощью регулярных найти HTML теги, при этом выделить все в массив:

array[0] = "Москва "
array[1] = '<a href="http://a.ru">'
array[2] = "лучше"
array[3] = "</a>"
array[4] = " Питера"

Автор: MikhailGirshberg, дата: 11 октября, 2010 - 17:16
#permalink
<html>
<body>

<script type="text/javascript">
var str='Питер <a href="http://a.ru">лучше, чем </a> Москва'
var re = /<[^>]*>|[а-я,\s]+/gi
var my_array = str.match(re)

for(var i in my_array){
document.writeln('my_array[' + i + '] = \'' + my_array[i].replace(/<([^>]*)>/gi, '&lt;$1&gt;') + '\'<br/>')
}
// 
// my_array[0] = 'Питер '
// my_array[1] = '<a href="http://a.ru">'
// my_array[2] = 'лучше, чем '
// my_array[3] = '</a>'
// my_array[4] = ' Москва'
//

</script>

</body>
</html>

а на вопрос "чем лучше?" мы с гордостью ответим: "чем Москва"
;-?


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

Клево! Мне понравилось! Раньше я не пользовался регулярными выражениями (задач типичных для их использования не было), но вот прочитал статью и применил на работе (правда я программирую на Java:)). Статья все подробно и хорошо объясняет, спасибо!


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

Помогите пожалуйста найти в url один из параметров GET-запроса.

Вот такое выражение что-то ничего не находит:
find_url_menu = /(\?.*$)menu=[0-9]+\1/


Автор: sshishov, дата: 29 ноября, 2010 - 03:24
#permalink

Что то наподобии этого:

function my(){
  var str='http://coupon.dayoffer.ru/?theme=billiard&coupon_id=VIGODA982500592&utm_source=SalesGenerator&menu=99&utm_medium=Click&utm_campaign=InShop.Ru&utm_content=Bouling';
  var myRe=/^.*?\?.*?(menu=[0-9]+).*$/g;
  var newStr = str.replace(myRe,"$1");
  alert(newStr); // menu=99
}

my();

Автор: Ivan1024 (не зарегистрирован), дата: 24 апреля, 2011 - 22:18
#permalink

str.match( /menu=\w*/g )


Автор: Mickers (не зарегистрирован), дата: 27 октября, 2010 - 12:41
#permalink

Имеется строка типа "\\Volume 1\test\range\12345.jpeg"
как ее преобразовать к UNIX-виду "//Volume 1/test/range.jpeg"?

\t воспринимаются как табуляция, \12 -спецсимволы и пр.


#permalink

Если строка получена извне (AJAX запросом, введена пользователем, получена как свойство какого-нибудь объекта), она воспринимается как надо.
Если она в таком виде вставляется в код, то есть смысл обработать ее на сервере, либо заменив слеши одного типа на другие, либо удвоив каждый слеш.


Автор: shkur, дата: 3 ноября, 2010 - 02:53
#permalink

как в regexp впихнуть переменную?

var nLastCol = 8;
var str = "--,--,--,--,--,--,--,--" //(ну на самом деле это Object)
if (/(--,?){8,8}/i.test(ss.getRange(ss.getLastRow(), 1, 1, nLastCol).getValues().toString())){
        Browser.msgBox('TRUE');
    } else {Browser.msgBox('FALSE');}

вместо {8,8} надо поставить {nLastCol,nLastCol}


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

Как заставить это работать с русскими символами?


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

Как заставить это работать с русскими символами?


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

[А-Яа-я]


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

Есть строка, состоящая из составных имен, например: "Klein Stadt Prag, Praga in Bohemia". Надо удалить только те пробелы, которые идут после запятой. Почему это выражение

alert("Klein Stadt Prag, Praga in Bohemia".replace(/(?:,)\s/g, ''));

удаляет и запятую, которая, вроде как, в незапоминающих скобках?


#permalink

А при чем тут скобки? Удаляется все, что попало под шаблон. А запятая попадает под него.


Автор: SergO_Cz, дата: 16 ноября, 2010 - 19:28
#permalink

Получается, чтобы замена работала, как я хочу, надо делать так:

alert("Klein Stadt Prag, Praga in Bohemia".replace(/,\s/g, ','));

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

var str = "'Klein Stadt Prag', Praga in Bohemia";

Как более правильно:

str.replace(/'|,\s/g, function(s){
  if (s==', ') return ','; 
  return '';
});
//используем одно сложное рег. выражение и функцию для выбора вариантов замены

или

str.replace(/,\s/g, ',').replace(/'/g, '');
//2 рег. выражения, и последовательная замена.

?


#permalink
str.replace(/(,)\s|'/g, '$1')

А вообще - все варианты равнозначны, правильнее может быть тот, что быстрее. А тут уже нужно проводить тесты.


Автор: SergO_Cz, дата: 17 ноября, 2010 - 13:55
#permalink

О! Про такой вариант я не догадался.
Ну, да, варианты равнозначны. Мне, чтобы обработать лишь одно поле ввода, тесты не обязательны, можно брать любой вариант. Так что, оставим тесты тем, кому это необходимо.
[email protected]><e, спасибо за советы. Автору - за статью.


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

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


Автор: Ярослав_A, дата: 3 октября, 2012 - 17:16
#permalink

Там написано i - регистр неважен


Автор: Александр_ (не зарегистрирован), дата: 7 января, 2011 - 17:43
#permalink

Как сделать так, чтобы при нахождении любого символа \s или \W был возвращён ноль (ложь)

так не работает

flag = !msg.match(/\s|\W/);

и так тоже..

flag = (msg.search(/\s|\W/)!= -1);

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

\s|\W - условие избыточное, поскольку \W уже содержит все символы из \s
flag = (msg.search(/\W/)!= -1);
должно нормально отработать


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

Есть строка, например - "_ха_блаблабла_хо_"
нужно получить содержимое обрамленное какими-то знаками (в данном случае - подчеркивания), без самих знаков.

делаю:

var s = "_ха_блаблабла_хо_"
var myRe = /_(.+?)_/g;
var myArray = s.match(myRe);

полуаю:

myArray - [ _ха_ , _хо_ ]

а мне надо:

myArray - [ ха , хо ]

можно ли этого добиться с помощью выражений?


Автор: eval, дата: 12 марта, 2011 - 15:41
#permalink

попалась строка напичканая символами типа " и пробелов ) сколько уже перегуглил и переяндексил + перечитал статей и перепробовал вариантов ... ничего не выходит !!! составьте пожалуйста регу на replace для очистки всего кроме цифр и букв расположенных вместе типа хеша пример : куча пробелов - 914nm1413nm14 " и дальше куча пробелов...
заранее благодарен !!!


Автор: mister_maxim, дата: 4 апреля, 2011 - 17:23
#permalink

попробуй так:
str.replace(/\s*$/gm, ',');
надеюсь выдаст нечто близкое к твоему желаемому результату, если не совсем так что-то - думаю легко увидишь, что поправить, например запятую убрать.


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

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


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

Как заставить работать со всеми буквами UTF-8?

Тут все предлагают для русских буквы использовать
[А-Яа-я]

А как быть с другими алфавитами?

В PHP это решается вот так:
preg_replace("/[^\p{L}0-9\+\-\_:\.@ ]/u", "", $_string));
\p{L} = все буквы
/u = работать с UTF-8

Как заставить JavaScript работать со всеми буквами всех алфавитов?

\w не подходит, так как вырезает все символы больше 128.


Автор: z700i, дата: 13 апреля, 2011 - 16:56
#permalink
a001.replace(/([()])/g, "\\$1"))

что здесь означает \\$1 и что оно делает?


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

у меня проболема возникла с командой test.Ввожу 100 выводит слово ERROR
var pricePattern = /^[0-9]+$^/;
var errorMessage = "";
function checkPrice(price)
{

if(!pricePattern.test(price)) {
alert("error");
errorMessage +="*" + errorPrice + "\n";
}
}


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

Возникла проблема:
как заменить символ "\" в строке, если после него идет символ n, то не находит.
в строке может идти любой символ после символа "\". мне нужно просто найти этот символ.
помогите пожалуйстаа


Автор: guffer, дата: 25 мая, 2011 - 09:38
#permalink

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

var res='src="file:D:///sss/content/myimg.jpg"'.replace('тутНезнаю','src=\''content');

в пути всегда есть папка "content" мне нужно отсечь все что идет до этой папки. я пробовал писать:

'src=\"file.+?\/content';

и еще кучу вариантов, но как-то ни какой замены не происходит.


Автор: kobezzza, дата: 25 мая, 2011 - 13:39
#permalink

1) Чтобы заменить символ \, нужно написать \\.

2) var res='src="file:D:///sss/content/myimg.jpg"'.replace(/.*?content\/(.*?)"/, 'src="content/$1"');


Автор: uchta (не зарегистрирован), дата: 1 июня, 2011 - 00:19
#permalink

!


Автор: uchta (не зарегистрирован), дата: 1 июня, 2011 - 00:25
#permalink

Только начинаю во всём разбираться!Помогите пожалуйста написать регу, которая будет искать в текстовом файле слова между словами start и end и менять их на слово mid. Очень нужно!Заранее благодарна!!!


Автор: bendator (не зарегистрирован), дата: 2 июня, 2011 - 15:15
#permalink

Никак не могу решить проблему. Javascript-модуль получает RegExp извне, и строку, которую надо проверить по полученному рег.выражению.
Например, получено рег.выражение "[0-9]{5}|[0-9]{8}" и строка "102040".
Методы test и match дают неправильный результат:

strRe = "[0-9]{5}|[0-9]{8}";
src = "102040";
var re = new RegExp(strRe);
var result1 = re.test(src); // возвращает true, что неверно
Проверяем при помощи match
var result2 = src.match(re); // тоже находит совпадения, т.к. result2.length=1

Как правильно построить проверку? Добавление символов ^ и $ в начало и конец строки с рег.выражением проблему не решают.


Автор: Maksat (не зарегистрирован), дата: 3 июня, 2011 - 10:41
#permalink

Если ты хочешь чтобы попадали только с размером 5 или 8 то вот решение:

strRe = "^[0-9]{5}$|^[0-9]{8}$";
src = "102040";
var re = new RegExp(strRe);
var result1 = re.test(src);//false
var result2 = src.match(re);//null

Автор: bendator (не зарегистрирован), дата: 6 июня, 2011 - 11:48
#permalink

Это правильно, но не приемлемо для меня. Рег.выр. поступает ИЗВНЕ, и для того чтобы его изменить (разбить на составляющие по ИЛИ и в каждое поставить значки $ и ^) надо по крайней мере его распарсить.
Интересно, что в IE, если ему подсунуть XML, приблизительно такой:

value>102040</value>

и XSD схему, в которой имеется:

<xsd:element name="value">
  <xsd:simpleType>
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[0-9]{5}|[0-9]{8}"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>

дает результат - элемент не валидный.
такой же результат дает Altova XMLSpy.
Как они работают, непонятно.


Автор: Котоваська (не зарегистрирован), дата: 7 июня, 2011 - 06:47
#permalink

Как убрать не значищие нули в дробном числе?


Автор: kobezzza, дата: 8 июня, 2011 - 00:17
#permalink

Метод toFixed


Автор: Николай123 (не зарегистрирован), дата: 8 июля, 2011 - 17:37
#permalink

Здравствуйте. есть небольшая проблемка.
есть такая строка
h_ttp://mysite.com/cat1/cat2/
как при условии что в строке нету слова cat3 выбрать все что после h_ttp://mysite.com/


Автор: Николай123 (не зарегистрирован), дата: 8 июля, 2011 - 17:48
#permalink

и нужно сделать это только с помощью рег. выражения( сделал отдельно выбор ^h_ttp://mysite.com//(.=?.*)$
отдельно как бы условие ^((?!cat3 \.svc).)*$ при котором если есть cat3 в строке то оно выбирает только последний символ


Автор: Dil (не зарегистрирован), дата: 12 июля, 2011 - 10:38
#permalink

ЗДРАВСТВУЙТЕ ВСЕМ! ПОМОГИТЕ ПОЖАЛУЙСТА!!!

Мне нужен регекс который определяет только телефонные номера, я написал такой:

var regex = /\b\(?(\d{3,6})?\)?[. -]?(\d{2,3})[. -]?(\d{2,4})?[. -]?(\d{2,4})?\b/;

но он, помимо номеров, определяет год, цены и т.д. (вобщем почти все числа). Как быть? Нужно чтобы определял только номера!

Примеры номеров: 1111 123456, 123456, 12-34-56, 123-456, 123, 1234, (111) 123-45-67

Спасибо заранее!


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

Интересно, а чем год будет отличаться от примеров "1234", "1111", или цена та же чем отличается от "123"? Вы с критериями отбора сначала определитесь.


Автор: Денн (не зарегистрирован), дата: 21 августа, 2011 - 21:10
#permalink

Подскажите, кто может
есть скрипт, цель которого в полученной строке, например, Сайт+для+гостиничного+бизнеса заменить все плюсы на пробелы. Так вот получается заменить плюс только после первого слова. Т.е скрипт выполняется один раз. Как сделать, чтоб замена была по всей строке?

<script type="text/javascript">
 var urlpage = document.URL;
var urlik = getVarValueFromURL(urlpage, 'zakaz'); 
var decodeurlik = decodeURI(urlik)
 
re = /\+/;
str = decodeurlik;
newstr = str.replace(re, " ");

document.getElementById('tema').value = newstr;

</script>

Автор: Денн (не зарегистрирован), дата: 22 августа, 2011 - 13:38
#permalink

Решил проблему, подставив в

re = /\+/;

модификатор g, позволяющий вести поиск по всей строке, т.е получается

re = /\+/<strong>g</strong>;
str = decodeurlik;
newstr = str.replace(re, " ");
document.getElementById('tema').value = newstr;

Автор: денн (не зарегистрирован), дата: 22 августа, 2011 - 13:40
#permalink

P.S в указанной строке теги strong использовать в коде не надо


Автор: Questioner, дата: 14 сентября, 2011 - 08:54
#permalink

Как сделать так, что бы в строке все числа( /[0-9]+/gim ) не находящиеся в скобках переносились через символ "=" и + заменялся бы на -, - на +, * на /, и / на *?


Автор: Андрей38, дата: 18 сентября, 2011 - 19:44
#permalink

Супер!


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

Как вставить в шаблон регулярного выражения строку из переменной.
Например :
var str = 'TEST';
var reg = /str\/(.*)/;


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

Элемент массива может быть шаблоном для регулярного выражения?


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

И элемент массива и строка - просто подставляйте параметром в
new RegExp("....");

например к вопросу у телефонных номерах
var test = "^([0-9]{11})([\.\,\#\/][0-9]{11})?$";
var RE_SSN = new RegExp(test);

alert(RE_SSN.test())


Автор: mcureen (не зарегистрирован), дата: 3 ноября, 2011 - 10:43
#permalink

Если элемент массива - строка, содержащая регулярное выражение, то почему бы нет:

RegExp(arr[i])

Аргументами конструктора RegExp() могут быть любые выражения возвращающие строку. Сокращённая запись выражения ( /expr/par ) в этом смысле ограничена.


Автор: Mihkach (не зарегистрирован), дата: 16 ноября, 2011 - 22:57
#permalink

В самом начале статьи нужно поменять местами примеры в этом фрагменте:

При втором вызове - т.к регулярное выражение в кавычках, то нужно дублировать \

// эквивалентны
re = new RegExp("\\w+")
re = /\w+/

Автор: mancu (не зарегистрирован), дата: 22 ноября, 2011 - 16:54
#permalink

Мой мирФотоВидеоБлог
Мирослав Воеводин на ответах Просветленный (20051)
Открыт: 27 минут назад, будет выставлен на голосование через 3 дня
JavaScript!? Регулярное выражение

пример: helloworld/something_example.ref
Как регуляркой выбрать то, что идет после символа _ и до .ref
т.е. example
я делаю

var regular = /(?<=_).+?(?=.ref)/i;

в итоге получаю invalid quantifier
, пробую динамически:

var regular = new RegExp('(?<=_).+?(?=.ref)','gi');

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


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

народ, помогите плизз, как с ниже кода выцепить
П5-678, где ELEMENT_ID

есть такой код хтмл:

П5-678

П5-678

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

народ, помогите плизз, как с ниже кода выцепить
П5-678, где ELEMENT_ID

есть такой код хтмл:

П5-678

П5-678

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

народ, помогите плизз, как с ниже кода выцепить
П5-678, где ELEMENT_ID

есть такой код хтмл:

П5-678

П5-678


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

народ, помогите плизз, как с ниже кода выцепить
П5-678, где ELEMENT_ID

есть такой код хтмл:

<div class="news-list">

<noindex><a href="/catalog/references.php?SECTION_ID=99&amp;print=Y" title="Версия для печати" rel="nofollow" target="blank"><div id="printer">печать&nbsp&nbsp&nbsp</div></a></noindex>

<div style="float: none;"></div>

<table width="100%" cellspacing="0" cellpadding="5">
<div id="bx_1415345843_1345">
	<div class="news-item" align="center" height="150" width="100">
		

		<div class="art" width="100">
									<a href="detail.php?ELEMENT_ID=1345">П5-678</a>
							</div>
									<a class="highslide" onclick="return hs.expand(this)" title="П5-678" href="/upload/iblock/729/72908f3d0c4fc1a9fecea8f9f5a54e7a.jpg"><img class="preview-picture" border="0" src="/upload/iblock/99c/99c3008729628ecaba8776026d948fe6.jpg" width="100" height="150" alt="П5-678" hspace="0" vspace="2" title="П5-678" style="float:left" /></a>
					<div class='highslide-heading'>
													П5-678											</div>
							<br>
		
				
							<div style="clear:both"></div>
							</div>
</div>

Автор: Гость, дата: 4 января, 2012 - 02:47
#permalink

Спонтанно возникла одна задачка, которую пока решить не хватает опыта, с регэкспами недавно начал знакомиться. Суть: строка состоит из значений, разделенных запятыми (как перечисление элементов массива), значения могут быть такими: [Ss] || [Ee] || [adhADH][число от 1 до 999]. Надо провести замены и получить строку с четырехзначными числами, по принципу: Ss заменяется на 4000, Ee заменяется на 9999, Aa на 3, Dd на 2, Hh на 1, все недостающие символы между [AaDdHh] и числом заменяются нулями. Собственно, в последнем и загвоздка:) Для примера, как это должно работать:
исходная строка: 's,a112,d8,h19,e,a1';
результат замен: '4000,3112,2008,1019,9999,3001'.
Заранее благодарю, если кто решит помочь:)


Автор: MitrickX, дата: 5 января, 2012 - 21:35
#permalink

Формулировка "все недостающие символы" не ясна мне. Подробнее...


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

В формулировке задачи указано, что результатом являются четырёхзначные числа, но если в 'd8' заменить d на 2, получается '28', а надо получить '2008', т.е. - все недостающие символы между буквой и числом заменяются нулями. Иначе говоря, "вес" букв: a = 3000, d = 2000, h = 1000, и к ним надо добавить числа, идущие после них.
P.S. Сделал кое-как, в принципе работает правильно но много замен:) Если предложите вариант получше, буду очень рад:) (читает значение переменной из textarea в документе и выводит уже сконвертированный результат)

function Convert() {
		var converter = document.getElementById('uncoded').value;
		function repl(regx,str) { converter = converter.replace(regx,str); }
		repl(/([^0-9][0-9]{2})(?![0-9])/gim,'0$&');
		repl(/(?:[^0-9])([1-9]{1})(?![0-9])/gim,'00$&');
		repl(/00a/gim,'a00');
		repl(/0a/gim,'a0');
		repl(/00d/gim,'d00');
		repl(/0d/gim,'d0');
		repl(/00h/gim,'h00');
		repl(/0h/gim,'h0');
		repl(/s/gim,'4000');
		repl(/e/gim,'9999');
		repl(/a/gim,'3');
		repl(/d/gim,'2');
		repl(/h/gim,'1');
		Write(converter,'fff','000');
	}

Автор: ALARMus, дата: 6 января, 2012 - 12:44
#permalink

Помогите с правильностью выражения.

Необходимо проверить правильность ввода МАС адреса, если не удовлетворяет условию, то выдать какой-то результат (например false в переменную)

т.е. 6 пар символов с ограничением: цифры от 0 до 9 или лат. буквы от A до F, разделенные двоеточием.

function isValidMacAddress(macAdd)
{
if macAdd.length = 17
{
var RegExPattern = /^([\d[A-F]{2}:){5}[\d[A-F]{2}$/;
return macAdd.test(RegExPattern)
}
else
return false;
} 
 }

1) не ошибся ли я в коде ?
2) правильно ли составлен паттерн -
а то есть вот такой вариант - не знаю чем он отличается и подходит ли
/^\s*([\d[A-F]{2}:){5}[\d[A-F]{2}\s*$/


Автор: ALARMus, дата: 6 января, 2012 - 09:23
#permalink

кстати критика\поправки статьи принимаются ?


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

Ребята, помогите - есть строка:

{"Title":"The Long Goodnight: A Film About Phil Collins","Year":"2007","Rated":"N/A","Released":"5 Sep 2007","Genre":"Documentary, Music","Director":"Anthony Mathile","Writer":"N/A","Actors":"Ronnie Caryl, Brad Cole, Phil Collins, Luis Conte","Plot":"In 2004 I came to a major decision in my life. I decided to stop my seemingly endless days of touring...","Poster":"N/A","Runtime":"1 hr 18 mins","Rating":"N/A","Votes":"N/A","ID":"tt1212426","Response":"True"}

Нужно распарсить в массив типа $str[Year] = [2007], $str[Rated] = [N/A] и т.д.


Автор: Рома878 (не зарегистрирован), дата: 20 января, 2012 - 02:04
#permalink
<head>
     <script type="text/javascript" src="jquery.js"></script>//Подключи JQuery.
</head>
var json = '{"Title":"The Long Goodnight: A Film About Phil Collins","Year":"2007","Rated":"N/A","Released":"5 Sep 2007","Genre":"Documentary, Music","Director":"Anthony Mathile","Writer":"N/A","Actors":"Ronnie Caryl, Brad Cole, Phil Collins, Luis Conte","Plot":"In 2004 I came to a major decision in my life. I decided to stop my seemingly endless days of touring...","Poster":"N/A","Runtime":"1 hr 18 mins","Rating":"N/A","Votes":"N/A","ID":"tt1212426","Response":"True"}';

var object = $.parseJSON(json);

Вот обращение к Year.
var str = object.Year

str == '2007';


Автор: CRIO (не зарегистрирован), дата: 21 января, 2012 - 01:18
#permalink
Парни помогите!
нужна замена "[b]" на "<b>"
output=input.replace(/\]/g, ">")
output=input.replace(/\[/g, "<")

получается "[/b>"

меняю местами
output=input.replace(/\[/g, "<")
output=input.replace(/\]/g, ">")

получается "</b]"
как ето исправить?

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

меняю местами
09 output=input.replace(/\[/g, "<")
10 output=input.replace(/\]/g, ">")
вы второй раз в исходнйо строке подменяете:
10 output=output.replace(/\]/g, ">")


Автор: alexandr_v-vich, дата: 31 января, 2012 - 17:34
#permalink

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


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

Вопрос. Символ ` учитывается в регулярных выражениях так же как буквы/цифры/etc, или же является каким-либо спецсимволом (не упомянутым здесь, как показывает поверхностное прочтение)?
Заранее спасибо.


Автор: Foxmatrix (не зарегистрирован), дата: 16 февраля, 2012 - 17:08
#permalink

Подскажите как можно сделать, у меня есть строка в которой содержится версия продукта например 4,10или например4 10 или цифры другим знаком каким нибудь разделены а мне нужно получить строку вида 4.10... Как я могу это сделать? Ну если хотябы не брать сложные варанты а только пробел, точку, запятую, слеш и все )


Автор: growler, дата: 5 августа, 2012 - 20:29
#permalink
// test array
var versions = [
        "4,10",
        "4 10",
        "4.10",
        "4-10"
    ],
    ver;

// test whole array
for (var i = 0; i < versions.length; i++) {
    // regular expr
    ver = versions[i].replace(/[^\d]/, ".");
    // debug
    console.log(ver);   // 4.10 .....
}

Автор: Sober_exe, дата: 28 февраля, 2012 - 09:50
#permalink

Ребята, нужна помощь.
в поле input вставляю строку содержащую некий перенос строки, например из этого же раздела скопировать строку кода "var myArray = myRe.exec("cdbBdbsbz");
". И в input получаются 2 строки, так вот этого не должно быть, нужно в строку.
Пишу следующее регулярное выражение:

$('input.search_fild').change(function(){
var enter = $(this).val();
var newString = enter.replace(/\r\n/, /\s/);
alert(newString);
});

т.е. меняю перенос строки на пробел. И это не срабатывает, всё равно в input 2 строки.
Для проверки делал:

$('input.search_fild').change(function(){
var enter = $(this).val();
var newString = enter.replace(/абв/, "1");
alert(newString);
});

в input писал "абв" - работает, меняется на "1".
P.s.: Кстати change отрабатывает после потери фокуса инпутом, а как на лету?


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

Вопрос - подскажите пожалуйста, есть "калькулятор" из выбранных параметров выводит значение из массива, но проблема в том, что в случае значений 0.244, 0.132 он возвращает 244 и 132 и так далее, и это происходит ТОЛЬКО в случе с 0. а в случае если это 1.47 выводит нормально - подскажите как решить эту проблему. сам я не знаю javascript, написал все что смог )))
код вот -

// <![CDATA[
// 

var matrix =
[[0,0,0,0,0,0,0,0,0,0,0.051],
[0,0,0,0,0,0,0,0,0,0,0.064],
[0,0,0,0,0,0,0,0,0.09,0.102,0.115],
[0,0,0,0,0,0,0,0.116,0.132,0.162,0.18],
[0,0,0,0,0,0,0.148,0.169,0.198,0.24,0.277],
[0,0,0,0,0,0.193,0.229,0.277,0.325,0.385,0.453],
[0,0,0,0.244,0.281,0.292,0.353,0.427,0.507,0.6,0.701],
[0,0,0.308,0.369,0,436,0.449,0.545,0.663,0.786,0.935,1.47],
[0,0.392,0.488,0.573,0,682,0.715,0.869,1.05,1.25,1.47,1.73],
[0.469,0.543,0.668,0.821,0.97,1.01,1.23,1.46,1.76,2.09,2.45],
[0.63,0.782,0.969,1.18,1.4,1.45,1.76,2.12,2.54,3,3.52],
[0.93,1.16,1.42,1.77,2.07,2.16,2.61,3.14,3.78,4.49,5.25],
[1.22,1.5,1.83,2.26,2.66,2.75,3.37,4.08,4.87,5.78,6.77],
[1.53,1.87,2.31,2.83,3.35,3.46,4.22,5.08,6.12,7.27,8.49],
[1.98,2.41,3.03,3.71,4.35,4.51,5.5,6.67,7.97,9.46,11.1],
[2.47,3.05,3.78,4.66,5.47,5.71,6.98,8.43,10.1,12,14],
[3.03,3.82,4.68,5.77,6.78,7.04,8.56,10.4,12.5,14.8,17.3],
[3.84,4.76,5.88,7.29,8.55,8.94,10.9,13.2,15.8,18.7,21.9],
[4.81,5.9,7.29,8.92,10.6,11,13.4,16.2,19.4,23.1,27],
[5.96,7.38,9.09,11.3,13.2,13.8,16.8,20.3,24.4,28.9,33.9],
[7.49,9.35,11.6,14.2,16.7,17.4,21.3,25.7,30.8,36.6,42.8],
[9.53,11.8,14,6,18,21.2,22.2,27,32.6,39.2,46.4,54.4],
[12.1,15.1,18,6,22.9,26.9,28,34.2,41.4,49.7,59,69],
[15.2,19,23,5,29,34,35.5,43.3,52.4,62.9,74.6,0],
[19,23.4,29,35.8,42,43.9,53.5,64.7,77.5,92.1,0],
[23.6,29.4,36.3,44.8,52.6,55,67.1,81,97.3,0,0],
[29.9,37.1,46,56.5,66.6,69.6,84.8,103,123,0,0],
[38.1,47.3,58.5,72.1,84.7,88.4,108,131,0,0,0],
[48.3,59.9,74.1,91.4,108,112,137,0,0,0,0],
[60.9,75.9,93.8,116,136,142,173,0,0,0,0],
[75.4,93.5,116,143,168,175,214,0,0,0,0],
[108,134,167,206,242,252,0,0,0,0,0],
[148,183,227,280,0,0,0,0,0,0,0],
[193,239,296,0,0,0,0,0,0,0,0]];

function selected()
{
id1=select1.options[select1.selectedIndex].value;
id2=select2.options[select2.selectedIndex].value;
rezultat.value=matrix[id2][id1]*mnojitel.value;
//rezultat.value=id1+"--"+id2;

}
// ]]></script>

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

есть одна замечательная вещица для работы с регулярками - RegexBuddy. Под рукой, извините, нет ни ссылки, ни самой штуки. Но кому не лень, советую приглядеться. Содержит в себе подсветку регулярки, инструменты для тестов, примеры для множества языков + библиотеку самых часто используемых регулярок


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

Как удалить одинаковые символы в строке?


Автор: growler_ua (не зарегистрирован), дата: 5 августа, 2012 - 20:17
#permalink

самому стало интересно.
я так и не смог с помощью регулярки.

держи в стиле С++ =)

function foo(str) {
        var to_return = "";
        for (var i = 0; i < str.length; i++) {
            if (i + 1 < str.length && str[i] == str[i + 1]) {
                continue;
            }
            to_return += str[i];
        }
        return to_return;
    }

    var bad_str = "hellllllo froooom man     ..... 1  ",
        good_str = foo(bad_str);
    //
    console.log(good_str);  // helo from man . 1

Автор: HImIK (не зарегистрирован), дата: 26 июля, 2012 - 11:18
#permalink

Это называется "запоминающие скобки".
Это называется группы!


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

Помогите разобраться
Нужно регулярное выражение, которое вырезает все скрипты из страницы
Все остальное должно оставаться нетронутым
Я написал такое, только оно вырезает все, что попадает между первым открывающимся тегом скрипт и последним закрывающимся
например:

Что-то 1
Это надо вырезать
Что-то 2
Это тоже надо вырезать
Конец

У меня получается в результате:
Что-то 1 Конец
А должно быть: Что-то 1 Что-то 2 Конец

Само выражение:

re = new RegExp("|\\stype=.text\\/javascript.>).*<\\/script>", "g");


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

Помогите разобраться
Нужно регулярное выражение, которое вырезает все скрипты из страницы
Все остальное должно оставаться нетронутым
Я написал такое, только оно вырезает все, что попадает между первым открывающимся тегом скрипт и последним закрывающимся
например:

Что-то 1
<скрипт>Это надо вырезать </скрипт>
Что-то 2
<скрипт>Это тоже надо вырезать </скрипт>
Конец

У меня получается в результате:
Что-то 1 Конец
А должно быть: Что-то 1 Что-то 2 Конец

Само выражение:

re = new RegExp("|\\stype=.text\\/javascript.>).*<\\/script>", "g");

Автор: Ник (не зарегистрирован), дата: 23 августа, 2012 - 09:22
#permalink

Народ, помогите кто может. Только разбираюсь во всём, потихоньку!!!

Есть строка:

$(function() {
$("#blockz<strong>XXXX</strong>").capslide({

Которая задаёт поведение в блоках с id "blockzХХХХ", где ХХХХ - это случайные цыфры. Что нужно добавить, чтобы она выбирала все имеющиеся на странице блоки без разницы, какое цифровое id (после blockz) они имеют?

Спасибо!


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

Народ, помогите кто может.
[3, 11, 15, 16, 19, 23, 30, 39, 41, 44, 48, 56, 61]
на выходе надо
[3; 11; 15; 16; 19; 23; 30; 39; 41; 44; 48; 56; 61]


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

Народ, помогите кто может.
[3, 11, 15, 16, 19, 23, 30, 39, 41, 44, 48, 56, 61]
на выходе надо
[3; 11; 15; 16; 19; 23; 30; 39; 41; 44; 48; 56; 61]


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

ResultArray = implode(";", explode(",", SourceArray))

или для строки

ResultStr = str_replace(",", ";", SourceStr)


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

Народ, помогите кто может.
[3, 11, 15, 16, 19, 23, 30, 39, 41, 44, 48, 56, 61]
на выходе надо
[3; 11; 15; 16; 19; 23; 30; 39; 41; 44; 48; 56; 61]


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

5


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

Всем Доброго времени суток!
Народ, помогите, пожалуйста. Есть вот такой код:

Visit

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


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

Скажите пожалуйста метод "test" что возвращает в качестве результата? "True" "false"? или что то другое?


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

True / false.


Автор: kama (не зарегистрирован), дата: 30 декабря, 2012 - 11:49
#permalink

А как задавать условие как это: x(?!y), только для предшествующих символов?


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

Есть такая строка

rgb(200, 200, 200) 34px 34px 34px, rgb(50, 50, 50) 0px -5px 23px, rgb(0, 0, 0) -43px -50px 35px

Как её разбить на подстроки так, чтобы в каждой подстроке был цвет, т.е rgb(R,G,B), и координаты т.е. Xpx Ypx Zpx?

Пример:

  1. rgb(200, 200, 200) 34px 34px 34px
  2. rgb(50, 50, 50) 0px -5px 23px
  3. rgb(0, 0, 0) -43px -50px 35px

Автор: Гость (не зарегистрирован), дата: 28 января, 2013 - 11:57
#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), что неправильно.
Подскажите, пожалуйста, где я не прав, и как должен выглядеть шаблон. Буду благодарен за пояснения.
Заранее благодарю всех откликнувшихся.


Автор: Yar (не зарегистрирован), дата: 31 января, 2013 - 03:05
#permalink

Есть строка, если совсем упрощенно, то выглядит она как "aba"
Небходимо находить в этой строке все: "ab" и "ba".
Т.к. индекс с которого начинать следующий поиск растет в данном примере будет найдено либо "ab" либо "ba", но в данном примере результатом поиска необходимо получать оба значения т.е "ab" и "ba", а не одно из них. Есть ли какое-либо изящное решение в регулярных выражениях для такого типа поиска без циклов и прочих надстроек?
Естественно пример упрощён до безобразия, в реальности строка в которой нужно искать все возможные варианты значительно больше и искомые значения значительно сложнее. Или может быть можно как-нибудь управлять lastIndex'ом (индекс, с которого начинать следующий поиск)?
P.S. я не ищу решение данного вопроса т.к. нагромоздить я умею и без чужой помощи =), я скорее ищу изящное (короткое и простое) решение или метод который мне неизвестен (если что пропустил в статье, то заранее прошу прощения).


Автор: Victoria Malaya (не зарегистрирован), дата: 14 мая, 2013 - 10:31
#permalink

Доброго времени суток!

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

Вот пример разметки:

     Scenario:  

  ABCDEFG &nbsp Scenario:

А вот то как это выглядит для пользователя:
Scenario:
ABCDEFG Scenario:

Мне приходит строка с разметкой и нужно определённым образом отформатировать строку "Scenario:", если она находится в начале строки, если же перед это строкой предшествуют какие-либо другие символы, то строка не должна быть найдена. При этом все предшествующие знаки пробелов должны быть сохранены.
В первом случае мне нужно найти строку "Scenario:", т.к. визуально она находится в начале строки перед которой предшествуют некоторое количество пробелов. Во втором же случае строка "Scenario:" не должна быть найдена, т.к. перед этой строкой предшествуют символы "ABCDEFG".

Буду очень признательна, если вы мне поможете решить эту задачку


Автор: Виктория Малая (не зарегистрирован), дата: 14 мая, 2013 - 10:37
#permalink

Доброго времени суток!

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

Вот пример разметки:
<p>     Scenario:  </p>
<p>  ABCDEFG &nbsp Scenario:</p>

А вот то как это выглядит для пользователя:

     Scenario:  

  ABCDEFG   Scenario:

Мне приходит строка с разметкой и нужно определённым образом отформатировать строку "Scenario:", если она находится в начале строки, если же перед это строкой предшествуют какие-либо другие символы, то строка не должна быть найдена. При этом все предшествующие знаки пробелов должны быть сохранены.
В первом случае мне нужно найти строку "Scenario:", т.к. визуально она находится в начале строки перед которой предшествуют некоторое количество пробелов. Во втором же случае строка "Scenario:" не должна быть найдена, т.к. перед этой строкой предшествуют символы "ABCDEFG".

Буду очень признательна, если вы мне поможете решить эту задачку


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

Всем Доброго времени суток!
Народ, помогите, пожалуйста. Есть длинная строка, в ней нужно заменить все ".", ",", "\" если они следуют за алфавитом (но не за цифрами) на " "?


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

есть строка "100 вылаождыва, +12"
вопрос
как вытащить последнии цифры.
я делаю так:

var aa = "100 вылаождыва, +12"
parseInt(aa.replace(/\D+/g,""));

что еще надо добавить?
у меня выдает оба числа 100 и 12, как вытащить только 12?


Автор: samogon13 (не зарегистрирован), дата: 13 июня, 2013 - 18:41
#permalink

Подскажите если ссылка

сайт.ру/view_main_right.php?id=3
id=номер статьи

как написать так?
сайт.ру/\S{1,}

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

Подскажите если ссылка

/view_main_right.php?id=3
id=номер статьи

как написать так?
/\S{1,}

Автор: lancer, дата: 8 июля, 2013 - 16:59
#permalink

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

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

Почему если в "A bird warbled" находиться b, то в "A goat grunted" не находиться o?


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

народ, надо подсчитать сколько символов "а" в слове "zanzara", есть вариант:

var i=0,
reg = RegExp("a", "g");
"zanzara".replace(reg, function(){ i++ });

и еще один:

Array.prototype.forEach.call("zanzara",function(ch){if(ch==="a") i++});

может кто-то знает что-ниб попроще


Автор: mobipak (не зарегистрирован), дата: 14 сентября, 2013 - 08:49
#permalink

Как-то так:

var tex = 'zanzara';

alert(tex.length - tex.replace(/a/g,'').length);

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

Строка: "M 610.5 30 L 610.5 155".

Необходимо получить число между "M" и "30", в данном случае оно "610.5". Не совсем понимаю как. Помоги плиз.


Автор: Кирилл Друцкой (не зарегистрирован), дата: 11 декабря, 2013 - 22:38
#permalink

Пытаюсь написать регулярное выражение, которое будет отбирать все файлы, не, которые не начинаются с буквы "j" и не имеют расширений EXE и DLL.

Исходя из вышеизложенного материала получилось выражение:

deposit/[^j](\w+)\.(?!mnu|pft)

Но оно не работает. Буду очень признателен за помощь.


Автор: s_drud, дата: 24 января, 2014 - 19:00
#permalink

А кто-нибудь может показать пример работающего варианта с незапоминающими скобками?
Пробовал по всякому-запоминают!Sad


Автор: Pavel54 (не зарегистрирован), дата: 18 февраля, 2014 - 18:25
#permalink

Ребята, у меня такой вопрос. Почему не работает регулярное выражение в отрицании:

var s = 'tyauir';
var r = /[^a]/.test(s);
console.log(r);

Казалось бы в строке s содержится буква a, следовательно отрицание должно давать false. Однако выходит true


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

Друзья, помогите составить выражение.
Есть строка типа:
name1#query1&name2#query2$name3#query3
нужно получить query для конкретного name
я вижу это так:
/^|\&name2\#(\w*)\&|$/i


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

name3#(\w+?)(\$|&|$)

$ - привязка к концу строки
name1-3 смотреть в первой группе


Автор: Гость (не зарегистрирован), дата: 30 августа, 2014 - 16:55
#permalink

Здрасте !

Помогите разобраться с регулярным выражением. Есть некий скрипт в котором есть регулярное выражение, которое ищет совпадение в тексте. Когда текст представляет из себя набор строк, в каждой из которых находится одно совпадение с регулярным выражением, то всё работает как надо. Но дело в том, что теперь текст стал в одной строке и находится только одно совпадение, которое самое последнее.
$transactionPattern = "/.*"
."\s(\d\d\d)"
."\s+(\d+\.\d\d)"
."\s+(\d+\.\d\d)"
."\s+(\d+\.\d\d)"
."(\d+)"
."(\d\d\d\d\d)"
."(\d\d\d\d\d\d)"
."(201\d\d\d\d\d)\s+"
."\d+(201\d\d\d\d\d)"
.".*/";


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

Отвечаю сам себе.
Методом научного тыка удалось обнаружить, что убрав в начале и конце регулярного выражения ".*" всё заработало.
Странно всё это.


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

Может ли тут кто-нибудь ответить на вопрос : почему "xy".match(/x?/) возвращает ["x"] , а "xy".match(/y?/) возвращает не ["y"] ?


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

regexr.com


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

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
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
Антиспам
1 + 2 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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