Регулярные выражения
Регулярные выражения в 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' nor '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("строка") ) {
...В строке есть пробелы!...
}
Метод 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 i = str.search(new RegExp("\\s","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);
}
Для общего понимания регулярных выражений можно почитать Статью в 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;
• (?<= – положительное условие на предыдущие символы и отрицатель
ное условие на предыдущие символы;
• комментарий (?# и прочий расширенный синтаксис (?.
Начал эксперементировать с примером разбора "3.4.5.1"
text = "Chapter 3.4.5.1";
\d)(\.\d)?(\.\d)?(\.\d)?)/i;
regex = /chapter (?
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('.');
text = "Chapter 3.4.5.1"; regex = /chapter (?:(\d)(\.\d)?(\.\d)?(\.\d)?)/i; result = text.match(regex); result[0] = ''; Log("result = " + result);[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 "); 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 */При использовании функции копирование в буфер - не сохраняются переводы каретки
Объясните разницу между [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));Никакой. Но не забываем экранировать, раз уж используем кавычки:
var pattern = new RegExp('^\\d{7,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}
но оно допускает и буквы и точки и прочие знаки. Подскажите, пожалуйста, как мне разрешить только цифры и косую?
подскажите пожалуйста
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 text = msg.replace(/(.[^\s\<\>]{15})/gi, "$1\n");Работает, но.. как?
Что значат здесь знаки больше/меньше с регеспами?
Прочто спасибо))))
Подскажите, каким образом можно отлавливать все знаки препинания?
например, если нужно удалять запятые и точки из входной строки?
Есть строка состоящая из натуральных чисел, разделенная ","
надо преобразовать в массив.
Пример (работает), если мы знаем размерность массива
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(',');
Существует ли разница при работе регулярного выражения с английскими и русскими буквами?
Что-то русские буквы не ищутся..
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.