ÐайдиÑе ÑÑÑоки в кавÑÑкаÑ
СоздайÑе ÑегÑлÑÑное вÑÑажение Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ÑÑÑок в двойнÑÑ
кавÑÑкаÑ
"...".
Ðажно, ÑÑо ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑкÑаниÑование Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð±ÑаÑного ÑлеÑа, по аналогии Ñо ÑÑÑоками JavaScript. ÐапÑимеÑ, кавÑÑки могÑÑ Ð±ÑÑÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÐºÐ°Ðº \", Ð½Ð¾Ð²Ð°Ñ ÑÑÑока как \n, а Ñам обÑаÑнÑй ÑÐ»ÐµÑ ÐºÐ°Ðº \\.
let str = "Ðак Ð²Ð¾Ñ \"здеÑÑ\".";
Ð ÑаÑÑноÑÑи, обÑаÑиÑе внимание: Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²ÑÑка поÑле обÑаÑного ÑлеÑа \" не оканÑÐ¸Ð²Ð°ÐµÑ ÑÑÑокÑ.
ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑкаÑÑ Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð¹ кавÑÑки до дÑÑгой, игноÑиÑÑÑ Ð²ÑÑÑеÑаÑÑиеÑÑ ÑкÑаниÑованнÑе кавÑÑки.
Ð ÑÑом и ÑоÑÑÐ¾Ð¸Ñ Ð¾ÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑложноÑÑÑ Ð·Ð°Ð´Ð°Ñи, коÑоÑÐ°Ñ Ð±ÐµÐ· ÑÑого ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð±Ñла Ð±Ñ ÑлеменÑаÑной.
ÐÑимеÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑÑок:
.. "test me" ..
.. "Скажи \"ÐÑивеÑ\"!" ... (ÑÑÑока Ñ ÑкÑаниÑованнÑми кавÑÑками)
.. "\\" .. (внÑÑÑи двойной ÑлеÑ)
.. "\\ \"" .. (внÑÑÑи двойной ÑÐ»ÐµÑ Ð¸ ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ°Ð²ÑÑка)
Ð JavaScript пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ ÑдваиваÑÑ Ð¾Ð±ÑаÑнÑе ÑлеÑи, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð¸Ñ Ð² ÑÑÑокÑ, как здеÑÑ:
let str = ' .. "test me" .. "Скажи \\"ÐÑивеÑ\\"!" .. "\\\\ \\"" .. ';
// ÑÑа ÑÑÑока в памÑÑи:
alert(str); // .. "test me" .. "Скажи \"ÐÑивеÑ\"!" .. "\\ \"" ..
РеÑение: /"(\\.|[^"\\])*"/g.
Шаг за Ñагом:
- СнаÑала иÑем оÑкÑÑваÑÑÑÑ ÐºÐ°Ð²ÑÑкÑ
" - ÐаÑем, еÑли еÑÑÑ Ð¾Ð±ÑаÑнÑй ÑлеÑ
\\(Ñдвоение обÑаÑного ÑлеÑа â ÑÐµÑ Ð½Ð¸ÑеÑкое, поÑÐ¾Ð¼Ñ ÑÑо ÑÑо ÑпеÑ.Ñимвол, на Ñамом деле Ñам один обÑаÑнÑй ÑлеÑ), Ñо поÑле него Ñакже подойдÑÑ Ð»Ñбой Ñимвол (ÑоÑка). - ÐнаÑе беÑÑм лÑбой Ñимвол, кÑоме кавÑÑек (коÑоÑÑе бÑдÑÑ Ð¾Ð·Ð½Ð°ÑаÑÑ ÐºÐ¾Ð½ÐµÑ ÑÑÑоки) и обÑаÑного ÑлеÑа (ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð¾Ð´Ð¸Ð½Ð¾ÐºÐ¸Ðµ обÑаÑнÑе ÑлеÑи, Ñам по Ñебе единÑÑвеннÑй обÑаÑнÑй ÑÐ»ÐµÑ Ð½Ðµ нÑжен, он должен ÑкÑаниÑоваÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо Ñимвол)
[^"\\] - â¦Ð Ñак далее, до закÑÑваÑÑей кавÑÑки.
РдейÑÑвии:
let regexp = /"(\\.|[^"\\])*"/g;
let str = ' .. "test me" .. "Скажи \\"ÐÑивеÑ\\"!" .. "\\\\ \\"" .. ';
alert( str.match(regexp) ); // "test me","Скажи \"ÐÑивеÑ\"!","\\ \""
