ÐоÑÑÑп к ÑодеÑÐ¶Ð¸Ð¼Ð¾Ð¼Ñ ÑкобоÑнÑÑ
гÑÑпп (...) еÑÑÑ Ð½Ðµ ÑолÑко в ÑезÑлÑÑаÑе поиÑка и пÑи замене, но и в Ñамом Ñаблоне.
ÐбÑаÑÐ½Ð°Ñ ÑÑÑлка по номеÑÑ: \N
РгÑÑппе можно обÑаÑиÑÑÑÑ Ð² Ñаблоне, иÑполÑзÑÑ \N, где N â ÑÑо Ð½Ð¾Ð¼ÐµÑ Ð³ÑÑппÑ.
ЧÑÐ¾Ð±Ñ Ð±Ñло ÑÑнее, заÑем ÑÑо нÑжно, ÑаÑÑмоÑÑим пÑимеÑ.
ÐеобÑ
одимо найÑи ÑÑÑоки в кавÑÑкаÑ
: либо одинаÑнÑÑ
'...', либо двойнÑÑ
"..." â оба ваÑианÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ñ
одиÑÑ.
Ðак найÑи Ñакие ÑÑÑоки?
Ðожно попÑÑаÑÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð±Ð° вида кавÑÑек в квадÑаÑнÑе Ñкобки: ['"](.*?)['"], но в Ñаком ÑлÑÑае бÑдÑÑ Ð½Ð°Ñ
одиÑÑÑÑ ÑÑÑоки Ñо ÑмеÑаннÑми кавÑÑками, напÑÐ¸Ð¼ÐµÑ "...' и '...". ÐÑо пÑиведÑÑ Ðº оÑибке, когда одна кавÑÑка окажеÑÑÑ Ð²Ð½ÑÑÑи дÑÑгиÑ
, как в ÑÑÑоке "She's the one!":
let str = `He said: "She's the one!".`;
let regexp = /['"](.*?)['"]/g;
// РезÑлÑÑÐ°Ñ - не ÑоÑ, коÑоÑÑй Ñ
оÑелоÑÑ Ð±Ñ
alert( str.match(regexp) ); // "She'
Ðак видно, Ñаблон наÑÑл оÑкÑÑваÑÑÑÑ ÐºÐ°Ð²ÑÑÐºÑ ", а поÑле наÑÑл ÑекÑÑ Ð²Ð¿Ð»Ð¾ÑÑ Ð´Ð¾ ÑледÑÑÑей кавÑÑки ', поÑле Ñего поиÑк завеÑÑилÑÑ.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ñаблон иÑкал закÑÑваÑÑÑÑ ÐºÐ°Ð²ÑÑÐºÑ ÑакÑÑ Ð¶Ðµ, как и оÑкÑÑваÑÑÑÑ, обеÑнÑм оÑкÑÑваÑÑие кавÑÑки в ÑкобоÑнÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð¸ иÑполÑзÑем обÑаÑнÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° неÑ: (['"])(.*?)\1.
ÐÐ¾Ñ Ð²ÐµÑнÑй код:
let str = `He said: "She's the one!".`;
let regexp = /(['"])(.*?)\1/g;
alert( str.match(regexp) ); // "She's the one!"
ТепеÑÑ ÑабоÑаеÑ! Ðвижок ÑегÑлÑÑнÑÑ
вÑÑажений наÑ
Ð¾Ð´Ð¸Ñ Ð¿ÐµÑвÑÑ ÐºÐ°Ð²ÑÑÐºÑ Ð¸Ð· Ñаблона (['"]) и Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ ÐµÑ ÑодеÑжимое. ÐÑо пеÑÐ²Ð°Ñ ÑкобоÑÐ½Ð°Ñ Ð³ÑÑппа.
Ðалее в Ñаблоне \1 ознаÑÐ°ÐµÑ Â«Ð½Ð°Ð¹Ñи Ñо же Ñамое, ÑÑо в пеÑвой ÑкобоÑной гÑÑппе», а именно â аналогиÑнÑÑ ÐºÐ°Ð²ÑÑÐºÑ Ð² наÑем ÑлÑÑае.
ÐналогиÑно, \2 ознаÑÐ°ÐµÑ ÑодеÑжимое вÑоÑой ÑкобоÑной гÑÑппÑ, \3 â ÑÑеÑÑей, и Ñак далее.
ÐÑ Ð½Ðµ можем обÑаÑиÑÑÑÑ Ðº гÑÑппе, коÑоÑÐ°Ñ Ð¸ÑклÑÑена из Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¿Ñи помоÑи ?:.
\1, пÑи замене $1Ð ÑÑÑоке Ð·Ð°Ð¼ÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑÑавки гÑÑÐ¿Ð¿Ñ Ð¼Ñ Ð¸ÑполÑзÑем доллаÑ: $1, а в Ñаблоне обÑаÑнÑй ÑÐ»ÐµÑ \1.
ÐбÑаÑÐ½Ð°Ñ ÑÑÑлка по имени: \k<имÑ>
ÐÑли в ÑегÑлÑÑном вÑÑажении много ÑкобоÑнÑÑ Ð³ÑÑпп, Ñо Ñдобно даваÑÑ Ð¸Ð¼ имена.
ÐÐ»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº именованной гÑÑппе можно иÑполÑзоваÑÑ ÑинÑакÑÐ¸Ñ \k<имÑ>.
РпÑимеÑе ниже кавÑÑки обознаÑÐµÐ½Ñ ?<quote>, Ñак ÑÑо обÑаÑение бÑÐ´ÐµÑ \k<quote>:
let str = `He said: "She's the one!".`;
let regexp = /(?<quote>['"])(.*?)\k<quote>/g;
alert( str.match(regexp) ); // "She's the one!"
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)