Ð ÑÑой главе Ð¼Ñ ÑаÑÑмоÑÑим вÑе деÑали меÑодов Ð´Ð»Ñ ÑабоÑÑ Ñ ÑегÑлÑÑнÑми вÑÑажениÑми.
str.match(regexp)
ÐеÑод str.match(regexp) иÑÐµÑ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ regexp в ÑÑÑоке str.
У него еÑÑÑ ÑÑи Ñежима ÑабоÑÑ:
-
ÐÑли Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÑ Ñлага
g, Ñо он возвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое Ñовпадение в виде маÑÑива Ñо ÑкобоÑнÑми гÑÑппами и ÑвойÑÑвамиindex(позиÑÐ¸Ñ ÑовпадениÑ),input(ÑÑÑока поиÑка, Ñавнаstr):let str = "I love JavaScript"; let result = str.match(/Java(Script)/); alert( result[0] ); // JavaScript (вÑÑ Ñовпадение) alert( result[1] ); // Script (пеÑвÑе Ñкобки) alert( result.length ); // 2 // ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ: alert( result.index ); // 7 (позиÑÐ¸Ñ ÑовпадениÑ) alert( result.input ); // I love JavaScript (иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока) -
ÐÑли Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÐµÑÑÑ Ñлаг
g, Ñо он возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив вÑÐµÑ Ñовпадений, без ÑкобоÑнÑÑ Ð³ÑÑпп и дÑÑÐ³Ð¸Ñ Ð´ÐµÑалей.let str = "I love JavaScript"; let result = str.match(/Java(Script)/g); alert( result[0] ); // JavaScript alert( result.length ); // 1 -
ÐÑли Ñовпадений неÑ, Ñо, вне завиÑимоÑÑи Ð¾Ñ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ñлага
g, возвÑаÑаеÑÑÑnull.ÐÑо оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ñй нÑанÑ. ÐÑи оÑÑÑÑÑÑвии Ñовпадений возвÑаÑаеÑÑÑ Ð½Ðµ пÑÑÑой маÑÑив, а именно
null. ÐÑли об ÑÑом забÑÑÑ, можно легко допÑÑÑиÑÑ Ð¾ÑибкÑ, напÑимеÑ:let str = "I love JavaScript"; let result = str.match(/HTML/); alert(result); // null alert(result.length); // ÐÑибка: Ñ null Ð½ÐµÑ ÑвойÑÑва lengthÐÑли Ñ Ð¾ÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑезÑлÑÑаÑом вÑегда бÑл маÑÑив, можно напиÑаÑÑ Ñак:
let result = str.match(regexp) || [];
str.matchAll(regexp)
ÐеÑод str.matchAll(regexp) â «новÑй, ÑлÑÑÑеннÑй» ваÑÐ¸Ð°Ð½Ñ Ð¼ÐµÑода str.match.
Ðн иÑполÑзÑеÑÑÑ, в пеÑвÑÑ Ð¾ÑеÑедÑ, Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка вÑÐµÑ Ñовпадений вмеÑÑе Ñо ÑкобоÑнÑми гÑÑппами.
У него 3 оÑлиÑÐ¸Ñ Ð¾Ñ match:
- Ðн возвÑаÑÐ°ÐµÑ Ð½Ðµ маÑÑив, а пеÑебиÑаемÑй обÑÐµÐºÑ Ñ ÑезÑлÑÑаÑами, обÑÑнÑй маÑÑив можно ÑделаÑÑ Ð¿Ñи помоÑи
Array.from. - Ðаждое Ñовпадение возвÑаÑаеÑÑÑ Ð² виде маÑÑива Ñо ÑкобоÑнÑми гÑÑппами (как
str.matchбез Ñлагаg). - ÐÑли Ñовпадений неÑ, Ñо возвÑаÑаеÑÑÑ Ð½Ðµ
null, а пÑÑÑой пеÑебиÑаемÑй обÑекÑ.
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
let str = '<h1>Hello, world!</h1>';
let regexp = /<(.*?)>/g;
let matchAll = str.matchAll(regexp);
alert(matchAll); // [object RegExp String Iterator], не маÑÑив, а пеÑебиÑаемÑй обÑекÑ
matchAll = Array.from(matchAll); // ÑепеÑÑ Ð¼Ð°ÑÑив
let firstMatch = matchAll[0];
alert( firstMatch[0] ); // <h1>
alert( firstMatch[1] ); // h1
alert( firstMatch.index ); // 0
alert( firstMatch.input ); // <h1>Hello, world!</h1>
ÐÑи пеÑебоÑе ÑезÑлÑÑаÑов matchAll в Ñикле for..of вÑзов Array.from, ÑазÑмееÑÑÑ, не нÑжен.
str.split(regexp|substr, limit)
Ð Ð°Ð·Ð±Ð¸Ð²Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð² маÑÑив по ÑазделиÑÐµÐ»Ñ â ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ regexp или подÑÑÑоке substr.
ÐбÑÑно Ð¼Ñ Ð¸ÑполÑзÑем меÑод split Ñо ÑÑÑоками, Ð²Ð¾Ñ Ñак:
alert('12-34-56'.split('-')) // маÑÑив [12, 34, 56]
Ðо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑазделиÑÑ Ð¿Ð¾ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑм обÑазом:
alert('12, 34, 56'.split(/,\s*/)) // маÑÑив [12, 34, 56]
str.search(regexp)
ÐеÑод str.search(regexp) возвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿ÐµÑвого ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ regexp в ÑÑÑоке str или -1, еÑли ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð½ÐµÑ.
ÐапÑимеÑ:
let str = "Я лÑÐ±Ð»Ñ JavaScript!";
let regexp = /Java.+/;
alert( str.search(regexp) ); // 8
Ðажное огÑаниÑение: str.search ÑÐ¼ÐµÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑолÑко позиÑÐ¸Ñ Ð¿ÐµÑвого ÑовпадениÑ.
ÐÑли нÑÐ¶Ð½Ñ Ð¿Ð¾Ð·Ð¸Ñии дÑÑгиÑ
Ñовпадений, Ñо ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð´ÑÑгой меÑод, напÑимеÑ, найÑи иÑ
вÑе пÑи помоÑи str.matchAll(regexp).
str.replace(str|regexp, str|func)
ÐÑо ÑнивеÑÑалÑнÑй меÑод поиÑка-и-заменÑ, один из ÑамÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ . ÐÑакий ÑвейÑаÑÑкий аÑмейÑкий нож Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка и Ð·Ð°Ð¼ÐµÐ½Ñ Ð² ÑÑÑоке.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÐµÐ³Ð¾ и без ÑегÑлÑÑнÑÑ Ð²ÑÑажений, Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка-и-Ð·Ð°Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð´ÑÑÑоки:
// замениÑÑ ÑиÑе двоеÑоÑием
alert('12-34-56'.replace("-", ":")) // 12:34-56
ХоÑÑ ÐµÑÑÑ Ð¿Ð¾Ð´Ð²Ð¾Ð´Ð½Ñй каменÑ.
Ðогда пеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ replace ÑвлÑеÑÑÑ ÑÑÑокой, он заменÑÐµÑ ÑолÑко пеÑвое Ñовпадение.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе видеÑÑ ÑÑо в пÑиведÑнном вÑÑе пÑимеÑе: ÑолÑко пеÑвÑй "-" заменÑеÑÑÑ Ð½Ð° ":".
ЧÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи вÑе деÑиÑÑ, нам нÑжно иÑполÑзоваÑÑ Ð½Ðµ ÑÑÑÐ¾ÐºÑ "-", а ÑегÑлÑÑное вÑÑажение /-/g Ñ Ð¾Ð±ÑзаÑелÑнÑм Ñлагом g:
// замениÑÑ Ð²Ñе ÑиÑе двоеÑоÑием
alert( '12-34-56'.replace( /-/g, ":" )) // 12:34:56
ÐÑоÑой аÑгÑÐ¼ÐµÐ½Ñ â ÑÑÑока заменÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² нем:
| СпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ | ÐейÑÑвие в ÑÑÑоке Ð·Ð°Ð¼ÐµÐ½Ñ |
|---|---|
$& |
вÑÑавлÑÐµÑ Ð²ÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ð¾Ðµ Ñовпадение |
$` |
вÑÑавлÑÐµÑ ÑаÑÑÑ ÑÑÑоки до ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ |
$' |
вÑÑавлÑÐµÑ ÑаÑÑÑ ÑÑÑоки поÑле ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ |
$n |
еÑли n ÑÑо 1-2 знаÑное ÑиÑло, Ñо вÑÑавлÑÐµÑ ÑодеÑжимое n-й Ñкобки (Ñм. Ð³Ð»Ð°Ð²Ñ Ð¡ÐºÐ¾Ð±Ð¾ÑнÑе гÑÑппÑ) |
$<name> |
вÑÑавлÑÐµÑ ÑодеÑжимое Ñкобки Ñ ÑказаннÑм name (Ñм. Ð³Ð»Ð°Ð²Ñ Ð¡ÐºÐ¾Ð±Ð¾ÑнÑе гÑÑппÑ) |
$$ |
вÑÑавлÑÐµÑ "$" |
ÐапÑимеÑ:
let str = "John Smith";
// поменÑÑÑ Ð¼ÐµÑÑами Ð¸Ð¼Ñ Ð¸ ÑамилиÑ
alert(str.replace(/(\w+) (\w+)/i, '$2, $1')) // Smith, John
ÐÐ»Ñ ÑиÑÑаÑий, коÑоÑÑе ÑÑебÑÑÑ Â«ÑмнÑÑ Â» замен, вÑоÑÑм аÑгÑменÑом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑнкÑиÑ.
Ðна бÑÐ´ÐµÑ Ð²ÑзÑваÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑовпадениÑ, и ÐµÑ ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑавлен в каÑеÑÑве заменÑ.
ФÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ñ Ð°ÑгÑменÑами func(match, p1, p2, ..., pn, offset, input, groups):
matchâ найденное Ñовпадение,p1, p2, ..., pnâ ÑодеÑжимое Ñкобок (Ñм. Ð³Ð»Ð°Ð²Ñ Ð¡ÐºÐ¾Ð±Ð¾ÑнÑе гÑÑппÑ).offsetâ позиÑиÑ, на коÑоÑой найдено Ñовпадение,inputâ иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока,groupsâ обÑÐµÐºÑ Ñ ÑодеÑжимÑм именованнÑÑ Ñкобок (Ñм. Ð³Ð»Ð°Ð²Ñ Ð¡ÐºÐ¾Ð±Ð¾ÑнÑе гÑÑппÑ).
ÐÑли Ñкобок в ÑегÑлÑÑном вÑÑажении неÑ, Ñо бÑÐ´ÐµÑ ÑолÑко 3 аÑгÑменÑа: func(match, offset, input).
ÐапÑимеÑ, пеÑеведÑм вÑбÑаннÑе ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² веÑÑ Ð½Ð¸Ð¹ ÑегиÑÑÑ:
let str = "html and css";
let result = str.replace(/html|css/gi, str => str.toUpperCase());
alert(result); // HTML and CSS
Ðаменим каждое Ñовпадение на его позиÑÐ¸Ñ Ð² ÑÑÑоке:
alert("Хо-Хо-Ñ
о".replace(/Ñ
о/gi, (match, offset) => offset)); // 0-3-6
РпÑимеÑе ниже две Ñкобки, поÑÑÐ¾Ð¼Ñ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð¼ÐµÐ½Ñ Ð²ÑзÑваеÑÑÑ Ñ 5-Ñ Ð°ÑгÑменÑами: пеÑвÑй â вÑÑ Ñовпадение, заÑем два аÑгÑменÑа ÑодеÑжимое Ñкобок, заÑем (в пÑимеÑе не иÑполÑзÑÑÑÑÑ) Ð¸Ð½Ð´ÐµÐºÑ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¸ иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока:
let str = "John Smith";
let result = str.replace(/(\w+) (\w+)/, (match, name, surname) => `${surname}, ${name}`);
alert(result); // Smith, John
ÐÑли в ÑегÑлÑÑном вÑÑажении много ÑкобоÑнÑÑ Ð³ÑÑпп, Ñо бÑÐ²Ð°ÐµÑ Ñдобно иÑполÑзоваÑÑ Ð¾ÑÑаÑоÑнÑе аÑгÑменÑÑ Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ним:
let str = "John Smith";
let result = str.replace(/(\w+) (\w+)/, (...match) => `${match[2]}, ${match[1]}`);
alert(result); // Smith, John
Ðли, еÑли Ð¼Ñ Ð¸ÑполÑзÑем именованнÑе гÑÑппÑ, Ñо обÑÐµÐºÑ groups Ñ Ð½Ð¸Ð¼Ð¸ вÑегда идÑÑ Ð¿Ð¾Ñледним, Ñак ÑÑо можно полÑÑиÑÑ ÐµÐ³Ð¾ Ñак:
let str = "John Smith";
let result = str.replace(/(?<name>\w+) (?<surname>\w+)/, (...match) => {
let groups = match.pop();
return `${groups.surname}, ${groups.name}`;
});
alert(result); // Smith, John
ÐÑполÑзование ÑÑнкÑии даÑÑ Ð½Ð°Ð¼ макÑималÑнÑе возможноÑÑи по замене, поÑÐ¾Ð¼Ñ ÑÑо ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð²ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñовпадении, Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп к внеÑним пеÑеменнÑм и Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð²ÑÑ ÑÑо Ñгодно.
regexp.exec(str)
ÐеÑод regexp.exec(str) иÑÐµÑ Ñовпадение Ñ regexp в ÑÑÑоке str. РоÑлиÑие Ð¾Ñ Ð¿ÑедÑдÑÑиÑ
меÑодов, вÑзÑваеÑÑÑ Ð½Ð° ÑегÑлÑÑном вÑÑажении, а не на ÑÑÑоке.
Ðн ведÑÑ ÑÐµÐ±Ñ Ð¿Ð¾-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð² завиÑимоÑÑи Ð¾Ñ Ñого, Ð¸Ð¼ÐµÐµÑ Ð»Ð¸ ÑегÑлÑÑное вÑÑажение Ñлаг g.
ÐÑли Ð½ÐµÑ g, Ñо regexp.exec(str) возвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое Ñовпадение в ÑоÑноÑÑи как str.match(regexp). Такое поведение не даÑÑ Ð½Ð°Ð¼ ниÑего нового.
Ðо еÑли еÑÑÑ g, Ñо:
- ÐÑзов
regexp.exec(str)возвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое Ñовпадение и Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿Ð¾Ñле него в ÑвойÑÑвеregexp.lastIndex. - СледÑÑÑий Ñакой вÑзов наÑÐ¸Ð½Ð°ÐµÑ Ð¿Ð¾Ð¸Ñк Ñ Ð¿Ð¾Ð·Ð¸Ñии
regexp.lastIndex, возвÑаÑÐ°ÐµÑ ÑледÑÑÑее Ñовпадение и Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿Ð¾Ñле него вregexp.lastIndex. - â¦Ð Ñак далее.
- ÐÑли Ñовпадений болÑÑе неÑ, Ñо
regexp.execвозвÑаÑаеÑnull, а длÑregexp.lastIndexÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°Ñение0.
Таким обÑазом, повÑоÑнÑе вÑÐ·Ð¾Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾Ð´Ð½Ð¾ за дÑÑгим вÑе ÑовпадениÑ, иÑполÑзÑÑ ÑвойÑÑво regexp.lastIndex Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑекÑÑей позиÑии поиÑка.
РпÑоÑлом, до поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑода str.matchAll в JavaScript, вÑзов regexp.exec иÑполÑзовали Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
Ñовпадений Ñ Ð¸Ñ
позиÑиÑми и гÑÑппами Ñкобок в Ñикле:
let str = 'ÐолÑÑе о JavaScript на https://javascript.info';
let regexp = /javascript/ig;
let result;
while (result = regexp.exec(str)) {
alert( `Ðайдено ${result[0]} на позиÑии ${result.index}` );
// Ðайдено JavaScript на позиÑии 9, заÑем
// Ðайдено javascript на позиÑии 31
}
ÐÑо ÑабоÑÐ°ÐµÑ Ð¸ ÑейÑаÑ, Ñ
оÑÑ Ð´Ð»Ñ ÑовÑеменнÑÑ
бÑаÑзеÑов str.matchAll, как пÑавило, Ñдобнее.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ regexp.exec Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ÑовпадениÑ, наÑÐ¸Ð½Ð°Ñ Ñ Ð½Ñжной позиÑии, еÑли вÑÑÑнÑÑ Ð¿Ð¾ÑÑавим lastIndex.
ÐапÑимеÑ:
let str = 'Hello, world!';
let regexp = /\w+/g; // без Ñлага g ÑвойÑÑво lastIndex игноÑиÑÑеÑÑÑ
regexp.lastIndex = 5; // иÑем Ñ 5-й позиÑии (Ñ.е Ñ Ð·Ð°Ð¿ÑÑой и далее)
alert( regexp.exec(str) ); // world
ÐÑли Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑÐ¾Ð¸Ñ Ñлаг y, Ñо поиÑк бÑÐ´ÐµÑ Ð²ÐµÑÑиÑÑ Ð½Ðµ наÑÐ¸Ð½Ð°Ñ Ñ Ð¿Ð¾Ð·Ð¸Ñии regexp.lastIndex, а ÑолÑко на ÑÑой позиÑии (не далее в ÑекÑÑе).
РпÑимеÑе вÑÑе заменим Ñлаг g на y. ÐиÑего найдено не бÑдеÑ, поÑколÑÐºÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ на позиÑии 5 Ñлова неÑ:
let str = 'Hello, world!';
let regexp = /\w+/y;
regexp.lastIndex = 5; // иÑем Ñовно на 5-й позиÑии
alert( regexp.exec(str) ); // null
ÐÑо Ñдобно в ÑÐµÑ ÑиÑÑаÑиÑÑ , когда Ð¼Ñ Ñ Ð¾Ñим «пÑоÑиÑаÑÑ» ÑÑо-Ñо из ÑÑÑоки по ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ на конкÑеÑной позиÑии, а не где-Ñо далее.
regexp.test(str)
ÐеÑод regexp.test(str) иÑÐµÑ Ñовпадение и возвÑаÑÐ°ÐµÑ true/false, в завиÑимоÑÑи Ð¾Ñ Ñого, наÑ
Ð¾Ð´Ð¸Ñ Ð»Ð¸ он его.
ÐапÑимеÑ:
let str = "Я лÑÐ±Ð»Ñ JavaScript";
// ÑÑи два ÑеÑÑа делаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же
alert( /лÑблÑ/i.test(str) ); // true
alert( str.search(/лÑблÑ/i) != -1 ); // true
ÐÑÐ¸Ð¼ÐµÑ Ñ Ð¾ÑÑиÑаÑелÑнÑм оÑвеÑом:
let str = "ÐÑ-лÑ-лÑ";
alert( /лÑблÑ/i.test(str) ); // false
alert( str.search(/лÑблÑ/i) != -1 ); // false
ÐÑли ÑегÑлÑÑное вÑÑажение Ð¸Ð¼ÐµÐµÑ Ñлаг g, Ñо regexp.test иÑеÑ, наÑÐ¸Ð½Ð°Ñ Ñ regexp.lastIndex и обновлÑÐµÑ ÑÑо ÑвойÑÑво, аналогиÑно regexp.exec.
Таким обÑазом, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ позиÑии:
let regexp = /лÑблÑ/gi;
let str = "Я лÑÐ±Ð»Ñ JavaScript";
// наÑаÑÑ Ð¿Ð¾Ð¸Ñк Ñ 10-й позиÑии:
regexp.lastIndex = 10;
alert( regexp.test(str) ); // false (Ñовпадений неÑ)
ÐÑли Ð¼Ñ Ð¿ÑименÑем одно и Ñо же ÑегÑлÑÑное вÑÑажение поÑледоваÑелÑно к ÑазнÑм ÑÑÑокам, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к невеÑÐ½Ð¾Ð¼Ñ ÑезÑлÑÑаÑÑ, поÑколÑÐºÑ Ð²Ñзов regexp.test обновлÑÐµÑ ÑвойÑÑво regexp.lastIndex, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð¸Ñк в новой ÑÑÑоке Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑаÑÑÑÑ Ñ Ð½ÐµÐ½Ñлевой позиÑии.
ÐапÑимеÑ, здеÑÑ Ð¼Ñ Ð´Ð²Ð°Ð¶Ð´Ñ Ð²ÑзÑваем regexp.test Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же ÑекÑÑа, и вÑоÑой Ñаз поиÑк завеÑÑаеÑÑÑ Ñже неÑдаÑно:
let regexp = /javascript/g; // (regexp ÑолÑко ÑÑо Ñоздан: regexp.lastIndex=0)
alert( regexp.test("javascript") ); // true (ÑепеÑÑ regexp.lastIndex=10)
alert( regexp.test("javascript") ); // false
ÐÑо именно поÑомÑ, ÑÑо во вÑоÑом ÑеÑÑе regexp.lastIndex не Ñавен нÑлÑ.
ЧÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð¹Ñи ÑÑо, можно пÑиÑвоиÑÑ regexp.lastIndex = 0 пеÑед новÑм поиÑком. Ðли вмеÑÑо меÑодов на ÑегÑлÑÑном вÑÑажении вÑзÑваÑÑ Ð¼ÐµÑÐ¾Ð´Ñ ÑÑÑок str.match/search/..., они не иÑполÑзÑÑÑ lastIndex.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)