Регулярные выражения
Регулярные выражения в 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".
В строке замены могут быть такие спецсимволы:
$$ |
Вставляет "$". |
$& |
Вставляет найденную подстроку. |
$` |
Вставляет часть строки, которая предшествует найденному вхождению. |
$' |
Вставляет часть строки, которая идет после найденного вхождения. |
$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.
|
\/-это косая черта?
Это косая черта "/", внутри регекспа
/.../
она экранируется бэкслешем "\".Например, регексп только для косой черты выглядит вот так:
/\//
Помогите пожалуйста!
В переменной str находятся несколько слов, разделённых между собой пробелом. Нужно записать в массив myArray только те из них, которые начинаются с a и заканчиваются на b. Т.е. что-то вроде:
В результате должно получиться:
Вопрос: что писать в тексте паттерна?
Если пользуетесь exec, то вам понадобится цикл, думаю лучше использовать match в вашем случае, можно например так:
var str = 'ab aa acb abc acdcdcdb'
var myRe = /\ba\w*b\b/gi
document.write(str.match(myRe))
Или ещё с таким патерном:
Извините, что постоянно повторяюсь но просто вы "изобрели столько велосипедов", а про стандартную функцию объекта String забыли!!!
var arr = 'ab aa acb abc acdcdcdb'.split(' ');
тю. а чего не так?
Разбей на массив эту строку, как explode в php, и потом ^a*b$
Не пойму зачем на массив разбивать? Смысл?
Ну. допустим. разбил - не фурычит! В качестве результата ничего не выдаёт.
Я с JS знаком всего-лишь немногим больше недели. Можно всё немного поподробней объяснить? Даже лучше исходник скрипта готовый выложи.
Как ты разбил? Что за вопросы насчёт "смысла" ? Тебе в итоге же массив и нужен, тогда какие оправдания чем этот способ не устаивает?
Надеюсь пробелы выкинул? Найди аналог phpшного explode, если не знаешь как правильно организовать. PHP JS тебе в лапы.
Потом в цикле for пробегаешься по массиву (не ищи в манах ссылок вида & и прочего php-дерьма, в JS массив СРАЗУ передаётся по жёсткой ссылке), если регексп не удовлетворяет - удаляешь его нахрен из массива. Вот и всё готово, в массиве останется только то что нужно. Исходник некогда ваять, время $$$.
Подскажите нубу через что можно поиск по всей странице сделать, пробовал через вариации win.document.getElementByTag('body').innerHTML не хочет
Ура научился document.body.innerHTML помог и статья http://javascript.ru/start/dom/intro
Подскажите, почему если в примере:
...
var newString = "XXzzzz".replace(/(X*)(z*)/, replacer)
заменить строку XXzzzz на например aaaXXzzzz, то того же результата не получиться. И что нужно написать в паттерне, чтоб получить тот же результат, что и в первом случае?
Вообще, не очень понятно какой результат нужно получить, но думаю если написать вот так
var newString = "XXzzzz".replace(/.*(X*)(z*)/, replacer)
то должно помочь.
а как быть если нужно заменить расширение допустим albom/123123.jpeg jpeg на html
Как сделать просмотр назад?
?<= и ?#n не работают.
Попробуйте \\1
то же возникла такая проблема а что значит \\1, где и как именно писать?
да и вообще, есть ли просмотр назад в 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;
• (?<= – положительное условие на предыдущие символы и отрицатель
ное условие на предыдущие символы;
• комментарий (?# и прочий расширенный синтаксис (?.
Действительно - очень обидно что нет непоглощающего поиска назад
это фундаментальная с моей точки зрения понятие.
Например, я бы не хотел бы включать в результат нахождения то, что было нужно для проверки идущего до самого нахождения, и это очень кстати при замене replace.
А вообще я хотел бы чтобы replace было не только для строки нахождения $0, но и для каждого кармана в отдельности: от $0 и до $n, т.е. чтобы кроме параметра строки замены в методе replace, были строки замены для каждого кармана.
Как я понимаю - восновном, такие задачи используются для поиска по внешним страницам, то есть открывать их придется PHP, или ему подобными. Там эти средства включены и работают на ура. А если поиск по внутренней странице - можно лучше подогнать регэксп, так как известно больше информации...
Начал эксперементировать с примером разбора "3.4.5.1"
text = "Chapter 3.4.5.1";
regex = /chapter (?\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)?
arrRez = "Chapter 3.4.5.1".replace(/[^\d\.]/g,'').split('.');
[xyz] Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире
Ох, не тире, а дефис. Хотя и употребляется в смысле «тире».
народ помогите плиз составить регулярку а то немогу сделать как надо
вот приблизительно строка
Kuzyаааaj456 dfdf наградил федю
надо разделить строку на 2 части до наградил и после
при этом Kuzyаааaj456 dfdf может состоять из Nго количества слов, букв, и содержать любые символы (лат\нелат\цифры\спецсимволы)
/(.+?) наградил (.+?)/
спасибо но чет непомогло первая переменная отобразилась верно а от второй одна буква (
/^(.+?) наградил (.+?)$/
написано чтобы напомнить но никак не объяснить. Оценка 2
+1
Человеку, первый раз встречающемуся с регулярными выражениями, очень тяжело понять по этой статье, как же их надо использовать
Эта статья ни в коей мере не ставит целью научить регулярным выражениям. Скорее она для тех, кто уже знает, что такое регэкспы и изучает их работу с ними в javascript.
Для тех кто хочет научится писать хорошие популярные статьи:
1. в начале статьи приводится Аннотация ( в которой кратко приводится как содержание статьи, так и характеристика потенциальной читательской аудитории)
2. в конце статьи приводится списки использованной и рекомендуемой литературы (для рекомендуемой литературы ссылки на википедию и мануалы - не катят, хотя в использованной литературе могут быть приведены)
3. совсем шикарно, если рекомендованная (не использованная, а, именно, рекомендуемая) литература снабжена аннотацией
4. для всего списка литературы приводится язык и год издания
не могу въехать в "запоминающие скобки" (вроде, куда уж проще)
Мне нужно из страницы выбрать и запомнить определенные числа (положительные и отрицательные) . Посоветовали воспользоваться match, а числа обрамить псевдотегами. вот какой паттен в итоге получился:
но когда проверяю alert (rates); массив выдает вместе с псевдотегами (типа 1, -1)
где я ошиблась
*блин, комменты ушли
но когда проверяю alert (rates); массив выдает вместе с псевдотегами (типа
)
В результирующем массиве содержимое скобок находится начиная с индекса 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 ");
пздц массив, это какой маньяк писал? это же полный пиздец не понятно нихера
Объясните разницу между [0-9] и \d
В коде ниже [0-9] и \d дают разные результаты, true и fasle соответственно.
Кодировка файла utf-8
Никакой. Но не забываем экранировать, раз уж используем кавычки:
вот еще полезный метод для оптимизации регулярных выражений RegExp.compile
Вот тут смотрю ваше руководство
Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, [abcd] - то же самое, что [a-d]. Найдет 'b' в "brisket" и 'c' в "ache".
Очень не понятно почему 'c' в "ache" . Сначала проверил а - английская (подумал что русская сначала). Потом зашел http://www.pcre.ru/eval/ и проверил там. Выдает результат поиска:
0: (a)
1: (c)
Т.е. найдет и а и c. Вопрос так почему будет c?
Задача состоит в том, чтобы проверять вводимое значении на соответствие шаблону 4 цифры/2 цифры или тоже самое без"/" (номер дома через дробь: 457/5) или просто номер дома.
У меня такое выражение:\d{1,4}\/\d{1,2}|\d{1,4}
но оно допускает и буквы и точки и прочие знаки. Подскажите, пожалуйста, как мне разрешить только цифры и косую?
вот так
/^\d{1,4}(\/\d{1,2})?$/
подскажите пожалуйста
var myRe = /(.*)\.(.*)/;
myRe.exec('el1.el2');
возвращает: el1.el2,el1,el2
el1.el2 - мне не нужно.
я догадываюсь из-за чего это происходит, но возможно ли как то сделать чтоб не проходило условие в котором есть точка?
подскажите пжз!
есть выражение replace(/(\[.*\])/gi,'xxx') которое меняет все что находится в скобках на xxx что дописать в эту часть /(\[.*\])/gi для того чтобы менялось все что в скобках и один любой символ с лева?
к примеру есть текст www-[yyy]-zzz нужно чтоб все что в скобках и знак минус был заменен -[yyy], но с лева может быть не только знак минус но и любой другой символ!
Спасибо за внимание!!!
Просто поставить точку (любой символ) перед квадратной скобкой, а именно:
Я так понимаю, что в javascript в отличии от php PCRE, чтобы точка "." обозначала точку в операторе альтернативы [], её следует экранировать?
Вопрос по теме. Думаю, и другим будет полезен. Помогите ПОНЯТЬ.
В чате (на аяксе) есть функция замены длинных слов (многие пишут, игнорируя пробелы). Вот она:
Работает, но.. как?
Что значат здесь знаки больше/меньше с регеспами?
Прочто спасибо))))
Подскажите, каким образом можно отлавливать все знаки препинания?
например, если нужно удалять запятые и точки из входной строки?
Есть строка состоящая из натуральных чисел, разделенная ","
надо преобразовать в массив.
Пример (работает), если мы знаем размерность массива
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");
Можно ли обойтись без дополнительного цикла (только регулярным выражением)?
А так уже нельзя var arr="10,150,0,1230,11,1234".split(',');
"10,150,0,1230".match( /\d+/g )
зачем ты внутри квадратных скобок записываешь символы в escape-последовательности, когда внутри этих скобок они принимают символьный вид и без косой черты?
Существует ли разница при работе регулярного выражения с английскими и русскими буквами?
Что-то русские буквы не ищутся..
Есть.
[A-Za-z] -промежуток с латинскими буквами
[А-Яа-я] - c русскими
>Есть.
>[A-Za-z] -промежуток с латинскими буквами
>[А-Яа-я] - c русскими
Я бы сказал что с русскими так:
[а-яА-ЯёЁ]
Есть строка:
Как с помощью регулярных найти HTML теги, при этом выделить все в массив:
а на вопрос "чем лучше?" мы с гордостью ответим: "чем Москва"
;-?
Клево! Мне понравилось! Раньше я не пользовался регулярными выражениями (задач типичных для их использования не было), но вот прочитал статью и применил на работе (правда я программирую на Java:)). Статья все подробно и хорошо объясняет, спасибо!
Помогите пожалуйста найти в url один из параметров GET-запроса.
Вот такое выражение что-то ничего не находит:
find_url_menu = /(\?.*$)menu=[0-9]+\1/
Что то наподобии этого:
str.match( /menu=\w*/g )
Имеется строка типа "\\Volume 1\test\range\12345.jpeg"
как ее преобразовать к UNIX-виду "//Volume 1/test/range.jpeg"?
\t воспринимаются как табуляция, \12 -спецсимволы и пр.
Если строка получена извне (AJAX запросом, введена пользователем, получена как свойство какого-нибудь объекта), она воспринимается как надо.
Если она в таком виде вставляется в код, то есть смысл обработать ее на сервере, либо заменив слеши одного типа на другие, либо удвоив каждый слеш.
как в regexp впихнуть переменную?
вместо {8,8} надо поставить {nLastCol,nLastCol}
Как заставить это работать с русскими символами?
Как заставить это работать с русскими символами?
[А-Яа-я]
Есть строка, состоящая из составных имен, например: "Klein Stadt Prag, Praga in Bohemia". Надо удалить только те пробелы, которые идут после запятой. Почему это выражение
удаляет и запятую, которая, вроде как, в незапоминающих скобках?
А при чем тут скобки? Удаляется все, что попало под шаблон. А запятая попадает под него.
Получается, чтобы замена работала, как я хочу, надо делать так:
Тогда еще вопрос.
Усложняем задание, в заданной строке некоторые названия могут быть заключены в кавычки, так кавычки тоже нужно удалить.
Как более правильно:
или
?
А вообще - все варианты равнозначны, правильнее может быть тот, что быстрее. А тут уже нужно проводить тесты.
О! Про такой вариант я не догадался.
Ну, да, варианты равнозначны. Мне, чтобы обработать лишь одно поле ввода, тесты не обязательны, можно брать любой вариант. Так что, оставим тесты тем, кому это необходимо.
B@rmaley.e><e, спасибо за советы. Автору - за статью.
вы юзаете /i, /gi и т.п., но ничего о них не пишете
вы не находите что неплохо бы добавить их описание ?
или для них здесь есть отдельная страничка ? - тогда киньте ссылку
Там написано i - регистр неважен
Как сделать так, чтобы при нахождении любого символа \s или \W был возвращён ноль (ложь)
так не работает
и так тоже..
\s|\W - условие избыточное, поскольку \W уже содержит все символы из \s
flag = (msg.search(/\W/)!= -1);
должно нормально отработать
Есть строка, например - "_ха_блаблабла_хо_"
нужно получить содержимое обрамленное какими-то знаками (в данном случае - подчеркивания), без самих знаков.
делаю:
полуаю:
а мне надо:
можно ли этого добиться с помощью выражений?
попалась строка напичканая символами типа " и пробелов ) сколько уже перегуглил и переяндексил + перечитал статей и перепробовал вариантов ... ничего не выходит !!! составьте пожалуйста регу на replace для очистки всего кроме цифр и букв расположенных вместе типа хеша пример : куча пробелов - 914nm1413nm14 " и дальше куча пробелов...
заранее благодарен !!!
попробуй так:
str.replace(/\s*$/gm, ',');
надеюсь выдаст нечто близкое к твоему желаемому результату, если не совсем так что-то - думаю легко увидишь, что поправить, например запятую убрать.
вот такая штука везде кроме фф3 выдает true, true, а в нем - true, false.
по какой-то неведомой причине фф3 считает, что при повторном вызове функции можно использовать ссылку на старый объект регулярки, а не создавать новый. если изменить конструкцию на new RegExp, то все нормально становится.
Как заставить работать со всеми буквами UTF-8?
Тут все предлагают для русских буквы использовать
[А-Яа-я]
А как быть с другими алфавитами?
В PHP это решается вот так:
preg_replace("/[^\p{L}0-9\+\-\_:\.@ ]/u", "", $_string));
\p{L} = все буквы
/u = работать с UTF-8
Как заставить JavaScript работать со всеми буквами всех алфавитов?
\w не подходит, так как вырезает все символы больше 128.
что здесь означает \\$1 и что оно делает?
у меня проболема возникла с командой test.Ввожу 100 выводит слово ERROR
var pricePattern = /^[0-9]+$^/;
var errorMessage = "";
function checkPrice(price)
{
if(!pricePattern.test(price)) {
alert("error");
errorMessage +="*" + errorPrice + "\n";
}
}
Возникла проблема:
как заменить символ "\" в строке, если после него идет символ n, то не находит.
в строке может идти любой символ после символа "\". мне нужно просто найти этот символ.
помогите пожалуйстаа
помогите плиз решить такую задачку:
мне нужно превратить абсолютный путь к файлу в относительный, то есть
в пути всегда есть папка "content" мне нужно отсечь все что идет до этой папки. я пробовал писать:
и еще кучу вариантов, но как-то ни какой замены не происходит.
1) Чтобы заменить символ \, нужно написать \\.
2) var res='src="file:D:///sss/content/myimg.jpg"'.replace(/.*?content\/(.*?)"/, 'src="content/$1"');
Только начинаю во всём разбираться!Помогите пожалуйста написать регу, которая будет искать в текстовом файле слова между словами start и end и менять их на слово mid. Очень нужно!Заранее благодарна!!!
Никак не могу решить проблему. Javascript-модуль получает RegExp извне, и строку, которую надо проверить по полученному рег.выражению.
Например, получено рег.выражение "[0-9]{5}|[0-9]{8}" и строка "102040".
Методы test и match дают неправильный результат:
Как правильно построить проверку? Добавление символов ^ и $ в начало и конец строки с рег.выражением проблему не решают.
Если ты хочешь чтобы попадали только с размером 5 или 8 то вот решение:
Это правильно, но не приемлемо для меня. Рег.выр. поступает ИЗВНЕ, и для того чтобы его изменить (разбить на составляющие по ИЛИ и в каждое поставить значки $ и ^) надо по крайней мере его распарсить.
Интересно, что в IE, если ему подсунуть XML, приблизительно такой:
и XSD схему, в которой имеется:
дает результат - элемент не валидный.
такой же результат дает Altova XMLSpy.
Как они работают, непонятно.
Как убрать не значищие нули в дробном числе?
Метод toFixed
Здравствуйте. есть небольшая проблемка.
есть такая строка
h_ttp://mysite.com/cat1/cat2/
как при условии что в строке нету слова cat3 выбрать все что после h_ttp://mysite.com/
и нужно сделать это только с помощью рег. выражения( сделал отдельно выбор ^h_ttp://mysite.com//(.=?.*)$
отдельно как бы условие ^((?!cat3 \.svc).)*$ при котором если есть cat3 в строке то оно выбирает только последний символ
ЗДРАВСТВУЙТЕ ВСЕМ! ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Мне нужен регекс который определяет только телефонные номера, я написал такой:
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
Спасибо заранее!
Интересно, а чем год будет отличаться от примеров "1234", "1111", или цена та же чем отличается от "123"? Вы с критериями отбора сначала определитесь.
Подскажите, кто может
есть скрипт, цель которого в полученной строке, например, Сайт+для+гостиничного+бизнеса заменить все плюсы на пробелы. Так вот получается заменить плюс только после первого слова. Т.е скрипт выполняется один раз. Как сделать, чтоб замена была по всей строке?
Решил проблему, подставив в
модификатор g, позволяющий вести поиск по всей строке, т.е получается
P.S в указанной строке теги strong использовать в коде не надо
Как сделать так, что бы в строке все числа( /[0-9]+/gim ) не находящиеся в скобках переносились через символ "=" и + заменялся бы на -, - на +, * на /, и / на *?
В самом начале статьи нужно поменять местами примеры в этом фрагменте:
При втором вызове - т.к регулярное выражение в кавычках, то нужно дублировать \
Мой мирФотоВидеоБлог
Мирослав Воеводин на ответах Просветленный (20051)
Открыт: 27 минут назад, будет выставлен на голосование через 3 дня
JavaScript!? Регулярное выражение
пример: helloworld/something_example.ref
Как регуляркой выбрать то, что идет после символа _ и до .ref
т.е. example
я делаю
var regular = /(?<=_).+?(?=.ref)/i;
в итоге получаю invalid quantifier
, пробую динамически:
var regular = new RegExp('(?<=_).+?(?=.ref)','gi');
, результат тот же, мне кажется ему 1-ое условие не нравится, так как же все-таки правильно?
Спонтанно возникла одна задачка, которую пока решить не хватает опыта, с регэкспами недавно начал знакомиться. Суть: строка состоит из значений, разделенных запятыми (как перечисление элементов массива), значения могут быть такими: [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'.
Заранее благодарю, если кто решит помочь:)
Формулировка "все недостающие символы" не ясна мне. Подробнее...
В формулировке задачи указано, что результатом являются четырёхзначные числа, но если в 'd8' заменить d на 2, получается '28', а надо получить '2008', т.е. - все недостающие символы между буквой и числом заменяются нулями. Иначе говоря, "вес" букв: a = 3000, d = 2000, h = 1000, и к ним надо добавить числа, идущие после них.
P.S. Сделал кое-как, в принципе работает правильно но много замен:) Если предложите вариант получше, буду очень рад:) (читает значение переменной из textarea в документе и выводит уже сконвертированный результат)
Помогите с правильностью выражения.
Необходимо проверить правильность ввода МАС адреса, если не удовлетворяет условию, то выдать какой-то результат (например false в переменную)
т.е. 6 пар символов с ограничением: цифры от 0 до 9 или лат. буквы от A до F, разделенные двоеточием.
1) не ошибся ли я в коде ?
2) правильно ли составлен паттерн -
а то есть вот такой вариант - не знаю чем он отличается и подходит ли
/^\s*([\d[A-F]{2}:){5}[\d[A-F]{2}\s*$/
кстати критика\поправки статьи принимаются ?
Ребята, помогите - есть строка:
{"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] и т.д.
Вот обращение к Year.
var str = object.Year
str == '2007';
меняю местами
09 output=input.replace(/\[/g, "<")
10 output=input.replace(/\]/g, ">")
вы второй раз в исходнйо строке подменяете:
10 output=output.replace(/\]/g, ">")
Спасибо, сложно, но информативно для первого знакомства
Вопрос. Символ ` учитывается в регулярных выражениях так же как буквы/цифры/etc, или же является каким-либо спецсимволом (не упомянутым здесь, как показывает поверхностное прочтение)?
Заранее спасибо.
Подскажите как можно сделать, у меня есть строка в которой содержится версия продукта например 4,10или например4 10 или цифры другим знаком каким нибудь разделены а мне нужно получить строку вида 4.10... Как я могу это сделать? Ну если хотябы не брать сложные варанты а только пробел, точку, запятую, слеш и все )
Ребята, нужна помощь.
в поле 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 отрабатывает после потери фокуса инпутом, а как на лету?
есть одна замечательная вещица для работы с регулярками - RegexBuddy. Под рукой, извините, нет ни ссылки, ни самой штуки. Но кому не лень, советую приглядеться. Содержит в себе подсветку регулярки, инструменты для тестов, примеры для множества языков + библиотеку самых часто используемых регулярок
Как удалить одинаковые символы в строке?
самому стало интересно.
я так и не смог с помощью регулярки.
держи в стиле С++ =)
Это называется "запоминающие скобки".
Это называется группы!
Помогите разобраться
Нужно регулярное выражение, которое вырезает все скрипты из страницы
Все остальное должно оставаться нетронутым
Я написал такое, только оно вырезает все, что попадает между первым открывающимся тегом скрипт и последним закрывающимся
например:
Что-то 1
Это надо вырезать
Что-то 2
Это тоже надо вырезать
Конец
У меня получается в результате:
Что-то 1 Конец
А должно быть: Что-то 1 Что-то 2 Конец
Само выражение:
re = new RegExp("|\\stype=.text\\/javascript.>).*<\\/script>", "g");
Помогите разобраться
Нужно регулярное выражение, которое вырезает все скрипты из страницы
Все остальное должно оставаться нетронутым
Я написал такое, только оно вырезает все, что попадает между первым открывающимся тегом скрипт и последним закрывающимся
например:
У меня получается в результате:
Что-то 1 Конец
А должно быть: Что-то 1 Что-то 2 Конец
Само выражение:
Народ, помогите кто может. Только разбираюсь во всём, потихоньку!!!
Есть строка:
Которая задаёт поведение в блоках с id "blockzХХХХ", где ХХХХ - это случайные цыфры. Что нужно добавить, чтобы она выбирала все имеющиеся на странице блоки без разницы, какое цифровое id (после blockz) они имеют?
Спасибо!
Народ, помогите кто может.
[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, 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]
ResultArray = implode(";", explode(",", SourceArray))
или для строки
ResultStr = str_replace(",", ";", SourceStr)
Народ, помогите кто может.
[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]
5
Всем Доброго времени суток!
Народ, помогите, пожалуйста. Есть вот такой код:
Visit
Как его изменить, чтобы одиночный пробел между словами заменялся на подчёркивание (_), а двойной пробел просто сливался. Т.е вот так должно получиться: шла_маша_пошоссе.
Скажите пожалуйста метод "test" что возвращает в качестве результата? "True" "false"? или что то другое?
True / false.
А как задавать условие как это: x(?!y), только для предшествующих символов?
Есть такая строка
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?
Пример:
rgb(200, 200, 200) 34px 34px 34px
rgb(50, 50, 50) 0px -5px 23px
rgb(0, 0, 0) -43px -50px 35px
Доброго времени суток, уважаемые специалисты.
Впервые столкнулся с регэкспами... Пока обходился без него, но жизнь заставила).
Не могу сформировать шиблон для задачи:
Нужно проверить, подходит ли строка под шаблон ЧИСЛО.ЧИСЛО
На данный момент додумался вот до этого:
Работает, но есть 2 НО:
1) ошибка при выполнении, если Chain=Null (не оч. критично)
2) под шаблон попадают также значения типа ЧИСЛО.ЧИСЛО.ЧИСЛО.ЧИСЛО (1.2.17.56), что неправильно.
Подскажите, пожалуйста, где я не прав, и как должен выглядеть шаблон. Буду благодарен за пояснения.
Заранее благодарю всех откликнувшихся.
Есть строка, если совсем упрощенно, то выглядит она как "aba"
Небходимо находить в этой строке все: "ab" и "ba".
Т.к. индекс с которого начинать следующий поиск растет в данном примере будет найдено либо "ab" либо "ba", но в данном примере результатом поиска необходимо получать оба значения т.е "ab" и "ba", а не одно из них. Есть ли какое-либо изящное решение в регулярных выражениях для такого типа поиска без циклов и прочих надстроек?
Естественно пример упрощён до безобразия, в реальности строка в которой нужно искать все возможные варианты значительно больше и искомые значения значительно сложнее. Или может быть можно как-нибудь управлять lastIndex'ом (индекс, с которого начинать следующий поиск)?
P.S. я не ищу решение данного вопроса т.к. нагромоздить я умею и без чужой помощи =), я скорее ищу изящное (короткое и простое) решение или метод который мне неизвестен (если что пропустил в статье, то заранее прошу прощения).
Доброго времени суток!
Подскажите пожалуйста, как правильно написать регулярное выложение для поиска определенного вхождения строки внутри разметки.
Вот пример разметки:
Scenario:
ABCDEFG   Scenario:
А вот то как это выглядит для пользователя:
Scenario:
ABCDEFG Scenario:
Мне приходит строка с разметкой и нужно определённым образом отформатировать строку "Scenario:", если она находится в начале строки, если же перед это строкой предшествуют какие-либо другие символы, то строка не должна быть найдена. При этом все предшествующие знаки пробелов должны быть сохранены.
В первом случае мне нужно найти строку "Scenario:", т.к. визуально она находится в начале строки перед которой предшествуют некоторое количество пробелов. Во втором же случае строка "Scenario:" не должна быть найдена, т.к. перед этой строкой предшествуют символы "ABCDEFG".
Буду очень признательна, если вы мне поможете решить эту задачку
Доброго времени суток!
Подскажите пожалуйста, как правильно написать регулярное выложение для поиска определенного вхождения строки внутри разметки.
Вот пример разметки:
<p> Scenario: </p>
<p> ABCDEFG   Scenario:</p>
А вот то как это выглядит для пользователя:
Scenario:
ABCDEFG Scenario:
Мне приходит строка с разметкой и нужно определённым образом отформатировать строку "Scenario:", если она находится в начале строки, если же перед это строкой предшествуют какие-либо другие символы, то строка не должна быть найдена. При этом все предшествующие знаки пробелов должны быть сохранены.
В первом случае мне нужно найти строку "Scenario:", т.к. визуально она находится в начале строки перед которой предшествуют некоторое количество пробелов. Во втором же случае строка "Scenario:" не должна быть найдена, т.к. перед этой строкой предшествуют символы "ABCDEFG".
Буду очень признательна, если вы мне поможете решить эту задачку
Всем Доброго времени суток!
Народ, помогите, пожалуйста. Есть длинная строка, в ней нужно заменить все ".", ",", "\" если они следуют за алфавитом (но не за цифрами) на " "?
есть строка "100 вылаождыва, +12"
вопрос
как вытащить последнии цифры.
я делаю так:
var aa = "100 вылаождыва, +12"
parseInt(aa.replace(/\D+/g,""));
что еще надо добавить?
у меня выдает оба числа 100 и 12, как вытащить только 12?
Подскажите если ссылка
Подскажите если ссылка
[quote]* Обозначает повторение 0 или более раз. Например, /bo*/ найдет 'boooo' в "A ghost booooed" и 'b' в "A bird warbled", но ничего не найдет в "A goat grunted".[/quote]
Объяснено совсем непонятно на мой взгляд, повторения чего и как?. Возможно этот вопрос поможет понять.
Почему если в "A bird warbled" находиться b, то в "A goat grunted" не находиться o?
народ, надо подсчитать сколько символов "а" в слове "zanzara", есть вариант:
и еще один:
может кто-то знает что-ниб попроще
Как-то так:
Строка: "M 610.5 30 L 610.5 155".
Необходимо получить число между "M" и "30", в данном случае оно "610.5". Не совсем понимаю как. Помоги плиз.
Пытаюсь написать регулярное выражение, которое будет отбирать все файлы, не, которые не начинаются с буквы "j" и не имеют расширений EXE и DLL.
Исходя из вышеизложенного материала получилось выражение:
Но оно не работает. Буду очень признателен за помощь.
А кто-нибудь может показать пример работающего варианта с незапоминающими скобками?
Пробовал по всякому-запоминают!
Ребята, у меня такой вопрос. Почему не работает регулярное выражение в отрицании:
Казалось бы в строке s содержится буква a, следовательно отрицание должно давать false. Однако выходит true
Друзья, помогите составить выражение.
Есть строка типа:
name1#query1&name2#query2$name3#query3
нужно получить query для конкретного name
я вижу это так:
/^|\&name2\#(\w*)\&|$/i
name3#(\w+?)(\$|&|$)
$ - привязка к концу строки
name1-3 смотреть в первой группе
Здрасте !
Помогите разобраться с регулярным выражением. Есть некий скрипт в котором есть регулярное выражение, которое ищет совпадение в тексте. Когда текст представляет из себя набор строк, в каждой из которых находится одно совпадение с регулярным выражением, то всё работает как надо. Но дело в том, что теперь текст стал в одной строке и находится только одно совпадение, которое самое последнее.
$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)"
.".*/";
Отвечаю сам себе.
Методом научного тыка удалось обнаружить, что убрав в начале и конце регулярного выражения ".*" всё заработало.
Странно всё это.
Может ли тут кто-нибудь ответить на вопрос : почему "xy".match(/x?/) возвращает ["x"] , а "xy".match(/y?/) возвращает не ["y"] ?
возвращает если к проверочной фразе добавить й
Есть ли метод сделать реплейс в /g для меняющегося аргумента.
Например, пишем:
text= 'Банан';
variable_text='ан';
alert (text.replace(/ан/g,'1')
- получаем результат "Б11", но хотим делать реплейс не по 'ан', а по variable_text
alert (text.replace(variable_text/g,'1') - не работает. Как надо?
Помогите разобраться.
Есть функция следующего вида:
// replace a regex match with a new string in a file globally
function regexReplaceInFile(aRegex,aReplace,aFile){
txt = readFile(aFile,false);
var rx = new RegExp(aRegex, "g");
txt = txt.replace(rx,aReplace);
saveFile(aFile,txt);
Как мне ее вызвать, чтобы она что-то там на что-то меняла?
Благодарю за ранее!
Хотя вроде бы разобрался.
помогите, пож-та, составить регулярное выражение, которое выведет запросы, содержащие от 3 до 8 слов, каждое слово от 2 до 5 символов.
у меня получилось, что выводит нужное кол-во слов, но как к ним привязать кол-во символов в каждом слове не понимаю..
^\S+(\s\S+){2,7}$
print ???
Например, вот такой скрипт:
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
---------------------
Этот скрипт ничего не выведет.
ХЭЛП Ребят :- )
Есть такой вот таймер реагирующий на строчку if (testCliks === 1)
if (testCliks === 1){
function timer() {
var obj=document.getElementById('timer_inp');
obj.innerHTML--;
if(obj.innerHTML==0){
alert('ВРЕМЯ ВЫШЛО :- (')
location.reload();
setTimeout(function(){},1000);}
else{setTimeout(timer,1000);}
}
setTimeout(timer,1000);
}
Проблема в том, каждое нажатие на if (testCliks === 1) (это блок игрового поля, типа карточка - тыкаешь, она что-то показывает) ускоряет таймер и он отсчитывает время как бешеный.
Нужно что бы таймер включался один только раз при условии if (testCliks === 1). Ну или как угодно, лишь бы работал по человечески :- )
Проблема вроде как флагом решается, но я не соображу как его тут поставить. Помогите с проблемой люди добрые
Нужно регулярное выражение для того, что бы
\t\t переводилось в | -
А \t в -
(аналогично \t\t\t\t\t в | | | | -)
Ибо такой код не в тренде:
Есть регулярное выражение для проверки имени пользователя /^([ЁA-ZА-Я]([ёa-zа-я])*(['-][ЁA-ZА-Я]([ёa-zа-я])*)*)$/u
Каким образом можно заставить его проверять только имена с количеством символов {3,10}
The article you share here is great. I really like and appreciate your work. I read your article deeply, the points you mentioned in this article are very helpful thanks for sharing.
temple run
Please continue this great work and I look forward to more of your awesome blog posts.
Chameleon care
Please continue this great work and I look forward to more of your awesome blog posts.
rico chandra kusuma
This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog..
I appreciate everything you have added to my knowledge base.Admiring the time and effort you put into your blog and detailed information you offer.Thanks.
Atherosclerosis
I have read your article, it is very informative and helpful for me.I admire the valuable information you offer in your articles. Thanks for posting it..
dji mavic mini
Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
hyaluronic acid injections side effects
Great article with excellent idea!Thank you for such a valuable article. I really appreciate for this great information..
indonesian maid agency
Это хороший вопрос, как добавить эту флеш игру в javascript? Это вообще возможно?
// эквивалентны
re = new RegExp("\\w+")
re = /\w+/
Вроде так правильно:
re = /\\w+/
Great article you make here and i think you are a professional blogger....
Cyberpunk 2077
Great article with excellent idea! Thank you for such a valuable article.
Rainierland
Thanks to post this kind of blog which are informative for everyone.
123movies
Kisscartoon alternatives
Thanks to post this kind of blog which are informative for everyone.
Watch Akame ga kill season 2
Guest posting services UK
You are special one who writes on this topic...
Putlocker 2020
123movies Unblocked Sites
Your blog is not only informative but also very artistic.
Legend of Korra
Watch legend of Korra Online
str.replace(/ [\s\S]+/, '')
это регулярное удаляет все символы после сочетания "пробел"+"любой знак" 1 или более раз,
подскажите пожалуйста, как сделать чтобы удаляло
после сочетания "-"+"любой знак" 1 или более раз
Are you looking to watch online HOD movie just click here.
House of the Dragon Release Date
The Good Lord Bird Release Date
I want you to thank for your time of this wonderful read!!! I definately enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog! google adwords accaunt for sale
I needed to thank you for this incredible read!! I unquestionably adored each and every piece of it. I have you bookmarked your site to look at the new stuff you post. Cryochambers for horses
I want you to thank for your time of this wonderful read!!! I definitely enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog Marine Companies in Dubai
Great article with excellent idea!Thank you for such a valuable article. I really appreciate for this great information.. Custom Patches
This is very interesting content! It is really what I wanted to see hope in future you will continue for sharing such an excellent post. torque meter
Impressive web site, Distinguished feedback that I can tackle. I am moving forward and may apply to my current job as a pet sitter, which is very enjoyable, but I need to additional expand. Regards.
cuentos de ciencia ficción
I truly value this superb post that you have accommodated us. I guarantee this would be helpful for a large portion of the general population. keyword ideas generator
The first phase the preparation should, theoretically, be uninfluenced by the intended intensity and duration of the sound which is subsequently produced. In fact, however, so quickly are the three phases accomplished that the pianist rarely has capacity to think, in performance, of each phase separately. Custom Embroidered Patches
One present why galore businesses opt for postcards is because they are overmuch cheaper to be prefab and this can forbear a lot of expenses on the lengthened run. digitizing embroidery service
Ich danke Ihnen für die Information! Ich war auf der Suche nach und konnte nicht finden. Du hast mir geholfen! 192.168.1.254
Provide the latest free ringtones for phones, tablets
https://kostenloseklingeltone.mobi/klingeltone-weihnachten/
https://kostenloseklingeltone.mobi/nokia-kick-retro-6061/
https://kostenloseklingeltone.mobi/general-lee-horn-7995/
Waow this is quite pleasant article, my sister love to read such type of post, I am going to tell her and bookmarking this webpage. Thanks voyance
Samarinda Cheat Merupakan Media Berbagi Cheat Point Blank, Cheat PUBG Emulator, Cheat Crossfire, Cheat Rules of Survival dan berbagai cheat lainnya. Kami mengutamakan user experience dengan menyediakan link download se singkat-singkatnya dan terdapat full tutorial untuk kalian yang baru menggunakan cheat, langsung aja ke Samarinda Cheat jika ingin mendownload cheat game online pc.
It was extremely all around composed and straightforward. Not at all like different online journals I have perused which are truly not that good.Thanks a lot leedon green
I have read the information you have shared with us and I found its very interesting. thank you so much for publishing this amazing blog post. 192.168.1.1
Hi! Really like this site because all information has already given to this page regarding this website! So awsome! Great job!Google adwords perth
You have a great sense of writing I must say. Your post has those facts which are not accessible from anywhere else. It’s my humble request to u please keep writing such remarkable articles buy neopoints
i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future..
frete mudança águas claras
This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
gyűjtős nemzetközi szállítmányozás Franciaország Europa Road
Hi there! Nice post! Please tell us when I will see a follow up!
Mudanças cruzeiro - DF
This article gives the light in which we can observe the reality. This is very nice one and gives indepth information. Thanks for this nice article.
Tree Pruning
Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic.
Mudanças asa norte
This was really an interesting topic and I kinda agree with what you have mentioned here!
moveis planejados brasilia
Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up.
Kích thước cửa đẹp xingfa tại đây
I have read your blog it is very helpful for me. I want to say thanks to you. I have bookmark your site for future updates.
nhôm hệ 55 là gì?
Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
Xiaomi Electric Scooters
Thanksgiving is coming so send thanksgiving wishes to your family and friends
I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
ovente electric kettle
I really enjoyed reading this post, big fan. Keep up the good work and please tell me when can you publish more articles or where can I read more on the subject?
ที่เที่ยวพังงา
I know your expertise on this. I must say we should have an online discussion on this. Writing only comments will close the discussion straight away! And will restrict the benefits from this information.
atp
Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
Lil peep
Very good points you wrote here..Great stuff...I think you've made some truly interesting points.Keep up the good work.
MBDI Dépannage Remorquage Transport à Roubaix et ses environs
Very nice article, I enjoyed reading your post, very nice share, I want to twit this to my followers. Thanks!.
Seven Cities Church VA
I am all that much satisfied with the substance you have specified. I needed to thank you for this extraordinary article. houston embroidery service
Thanks for taking the time to discuss this, I feel strongly that love and read more on this topic. If possible, such as gain knowledge, would you mind updating your blog with additional information? It is very useful for me.
for more information
Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
financial coach marketing
Nice information, valuable and excellent design, as share good stuff with good ideas and concepts,
lots of great information and inspiration, both of which I need,
thanks to offer such a helpful information here. 먹튀검증
Nice information, valuable and excellent design, as share good stuff with good ideas and concepts,
lots of great information and inspiration, both of which I need,
thanks to offer such a helpful information here. 먹튀검증
“Very nice post. I jus stumbled upon your blog and wished to say thnat I have truly enjoyed
surfing around your blog posts. After all I will be
subscribing too your feed and I hole you write again very soon!” 대출
Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
تعلم اللغة الانجليزية
I really enjoyed reading this post, big fan. Keep up the good work and please tell me when can you publish more articles or where can I read more on the subject?
Seven Cities Church
Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include.
vận chuyển ô tô bắc nam
It was a decent post to be sure. I completely delighted in understanding it in my lunch time. Will definitely come and visit this blog all the more frequently. Much obliged for sharing. Free Health Coverage
Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
solicitor Tbilisi
I can set up my new idea from this post. It gives in depth information. Thanks for this valuable information for all,..
Click here
This is such a great resource that you are providing and you give it away for free. I love seeing blog that understand the value. Im glad to have found this post as its such an interesting one! I am always on the lookout for quality posts and articles so i suppose im lucky to have found this! I hope you will be adding more in the future...
Click here
I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.
https://abonnenten24.de
I was looking at some of your posts on this website and I conceive this web site is really instructive! Keep putting up..
Domótica
I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
digital marketing
I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
alquiler de carros cartagena
I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
bridgend house clearance
Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic.
hartlepool removals
Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
Heimautomation
Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
tree surgeon in colchester
I know your expertise on this. I must say we should have an online discussion on this. Writing only comments will close the discussion straight away! And will restrict the benefits from this information.
covid holbox
Your content is nothing short of brilliant in many ways. I think this is engaging and eye-opening material. Thank you so much for caring about your content and your readers.
best place to snorkel in cozumel
Good post.
logitech g hub vs logitech gaming software
Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
sikerdíjas pályázatírás Debrecen
I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post.
buy onlyfans subscribers
this is really nice to read..informative post is very good to read..thanks a lot!
best cenotes in riviera maya
Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It 's really very nice and Useful post.Thanks
best cenotes in riviera maya
Thank you for the valuable advice! The clarity with which you explained things made it easy for me to resolve the ragdoll hit issue.
This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog..
rumah pintar
Thanks for your guide. Check our guide about golf clubs from https://thegolfingpro.com/best-golf-clubs-for-mid-handicappers/
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.