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