РегÑлÑÑнÑе вÑÑажениÑ
РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ - ÑÑо ÑаблонÑ, иÑполÑзÑемÑе Ð´Ð»Ñ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей Ñимволов в ÑÑÑокаÑ
. Ð JavaScript ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñакже ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами. ÐÑи ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² меÑодаÑ
exec и test обÑекÑа RegExp а Ñакже match, replace, search, split обÑекÑа String. ÐÐ°Ð½Ð½Ð°Ñ Ð³Ð»Ð°Ð²Ð° опиÑÑÐ²Ð°ÐµÑ ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² JavaScript.
Создание ÑегÑлÑÑного вÑÑажениÑ
РегÑлÑÑное вÑÑажение можно ÑоздаÑÑ Ð´Ð²ÑÐ¼Ñ ÑпоÑобами:
-
ÐÑполÑзÑÑ Ð»Ð¸ÑеÑал ÑегÑлÑÑного вÑÑажениÑ, напÑимеÑ:
jsvar re = /ab+c/;ÐиÑеÑÐ°Ð»Ñ ÑегÑлÑÑнÑÑ Ð²ÑÑажений вÑзÑваÑÑ Ð¿ÑедваÑиÑелÑнÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑÐ¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи анализе ÑкÑипÑа. ÐÑли ваÑе ÑегÑлÑÑное вÑÑажение поÑÑоÑнно, Ñо полÑзÑйÑеÑÑ Ð¸Ð¼, ÑÑÐ¾Ð±Ñ ÑвелиÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
-
ÐÑзÑÐ²Ð°Ñ ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ Ð¾Ð±ÑекÑа
RegExp, напÑимеÑ:jsvar re = new RegExp("ab+c");ÐÑполÑзование конÑÑÑÑкÑоÑа влеÑÑÑ Ð·Ð° Ñобой компилÑÑÐ¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑкÑипÑа. ÐÑполÑзÑйÑе даннÑй ÑпоÑоб, еÑли знаеÑе, ÑÑо вÑÑажение бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¸Ð»Ð¸ не знаеÑе Ñаблон заÑанее. ÐапÑÐ¸Ð¼ÐµÑ Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе его из ÑÑоÑоннего иÑÑоÑника, пÑи полÑзоваÑелÑÑком вводе.
ÐапиÑание Ñаблона ÑегÑлÑÑного вÑÑажениÑ
Шаблон ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· обÑÑнÑÑ
Ñимволов, напÑÐ¸Ð¼ÐµÑ /abc/, или комбинаÑий обÑÑнÑÑ
и ÑпеÑиалÑнÑÑ
Ñимволов, напÑÐ¸Ð¼ÐµÑ /ab*c/ или /Chapter (\d+)\.\d*/. ÐоÑледний пÑÐ¸Ð¼ÐµÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ñкобки, коÑоÑÑе иÑполÑзÑÑÑÑÑ ÐºÐ°Ðº "запоминаÑÑий меÑ
анизм". СооÑвеÑÑÑвие ÑÑой ÑаÑÑи Ñаблона запоминаеÑÑÑ Ð´Ð»Ñ Ð´Ð°Ð»ÑнейÑего иÑполÑзованиÑ, как опиÑано в ÐÑполÑзование Ñовпадений подÑÑÑок заклÑÑÑннÑÑ
в Ñкобки.
ÐÑполÑзование пÑоÑÑÑÑ Ñаблонов
ÐÑоÑÑÑе ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð½Ð°Ñ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑÑмого ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð² ÑекÑÑе. ÐапÑимеÑ, Ñаблон /abc/ ÑооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñии Ñимволов в ÑÑÑоке ÑолÑко когда ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ 'abc' вÑÑÑеÑаÑÑÑÑ Ð²Ð¼ÐµÑÑе и в Ñом же поÑÑдке. Такое ÑопоÑÑавление пÑоизойдÑÑ Ð² ÑÑÑоке "Hi, do you know your abc's?" и "The latest airplane designs evolved from slabcraft." РобоиÑ
ÑлÑÑаÑÑ
ÑопоÑÑавление пÑоизойдÑÑ Ñ Ð¿Ð¾Ð´ÑÑÑокой 'abc'. СопоÑÑавление не пÑоизойдÑÑ Ð² ÑÑÑоке "Grab crab", поÑÐ¾Ð¼Ñ ÑÑо она не ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ 'abc'.
ÐÑполÑзование ÑпеÑиалÑнÑÑ Ñимволов
Ð ÑлÑÑае когда поиÑк ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑебÑÐµÑ Ñего-Ñо болÑÑего, Ñем пÑÑмое ÑопоÑÑавление, напÑÐ¸Ð¼ÐµÑ Ð½Ð°Ñ
ождение поÑледоваÑелÑноÑÑи Ñимволов 'b' или наÑ
ождение пÑобела, Ñаблон вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑпеÑиалÑнÑе ÑимволÑ. ÐапÑимеÑ, Ñаблон /ab*c/ ÑооÑвеÑÑÑвÑÐµÑ Ð»Ñбой комбинаÑии Ñимволов, в коÑоÑой за 'a' ÑледÑÐµÑ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более Ñимволов 'b' (* ознаÑÐ°ÐµÑ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более вÑ
ождений пÑедÑдÑÑего Ñимвола), за коÑоÑÑми ÑÑÐ°Ð·Ñ Ð¶Ðµ ÑледÑÐµÑ Ñимвол 'c'. Ð ÑÑÑоке "cbbabbbbcdebc," ÑÑÐ¾Ð¼Ñ ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑопоÑÑавлÑеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока 'abbbbc'.
Ð ÑледÑÑÑей ÑаблиÑе пÑиводиÑÑÑ Ð¿Ð¾Ð»Ð½Ñй ÑпиÑок ÑпеÑиалÑнÑÑ Ñимволов ÑегÑлÑÑнÑÑ Ð²ÑÑажений Ñ Ð¸Ñ Ð¾Ð¿Ð¸ÑаниÑми.
| Символ | ÐнаÑение |
|---|---|
\
|
Ðдно из ÑледÑÑÑего:
|
^
|
СооÑвеÑÑÑвÑÐµÑ Ð½Ð°ÑÐ°Ð»Ñ Ð²Ð²Ð¾Ð´Ð°. ÐÑли ÑÑÑановлен Ñлаг многоÑÑÑоÑноÑÑи, Ñакже пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑопоÑÑавление непоÑÑедÑÑвенно поÑле пеÑеноÑа ÑÑÑоки.
ÐапÑимеÑ,
ÐапÑимеÑ, |
$
|
СооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ð½ÑÑ Ð²Ð²Ð¾Ð´Ð°. ÐÑли ÑÑÑановлен биÑовÑй Ñлаг многоÑÑÑоÑноÑÑи, Ñакже ÑопоÑÑавлÑеÑÑÑ ÑодеÑÐ¶Ð¸Ð¼Ð¾Ð¼Ñ Ð´Ð¾ пеÑеноÑа ÑÑÑоки.
ÐапÑимеÑ, |
*
|
СооÑвеÑÑÑвÑÐµÑ Ð¿ÑедÑдÑÑÐµÐ¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð½Ð¾Ð¼Ñ 0 или более Ñаз. ÐквиваленÑно {0,}.
ÐапÑимеÑ, |
+
|
СооÑвеÑÑÑвÑÐµÑ Ð¿ÑедÑдÑÑÐµÐ¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð½Ð¾Ð¼Ñ 1 или более Ñаз. ÐквиваленÑно {1,}.
ÐапÑимеÑ, |
?
|
СооÑвеÑÑÑвÑÐµÑ Ð¿ÑедÑдÑÑÐµÐ¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð²ÑоÑенномÑ
0 или 1 Ñаз. ÐквиваленÑно {0,1}.
ÐапÑимеÑ,
ÐÑли иÑполÑзован ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле квалиÑикаÑоÑов Также иÑполÑзÑеÑÑÑ Ð² ÑпÑеждаÑÑÐ¸Ñ ÑÑвеÑждениÑÑ (assertions), опиÑаннÑÑ Ð² ÑÑÑÐ¾ÐºÐ°Ñ x(?=y) и x(?!y) данной ÑаблиÑÑ. |
.
|
(деÑÑÑиÑÐ½Ð°Ñ ÑоÑка) ÑооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÐºÑоме пеÑеноÑа ÑÑÑоки.
ÐапÑимеÑ, |
(x)
|
СооÑвеÑÑÑвÑÐµÑ 'x' и Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ ÑÑо ÑооÑвеÑÑÑвие. ÐÑо назÑваеÑÑÑ Ð·Ð°Ñ Ð²Ð°ÑÑваÑÑие Ñкобки.
ÐапÑимеÑ, |
(?:x)
|
СооÑвеÑÑÑвÑÐµÑ 'x' но не Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ ÑооÑвеÑÑÑвие. ÐÑо назÑваеÑÑÑ
не-заÑ
ваÑÑваÑÑие Ñкобки. СопоÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑока не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑена из
ÑлеменÑов ÑезÑлÑÑиÑÑÑÑего маÑÑива
[1], ..., [n].
|
x(?=y)
|
СооÑвеÑÑÑвÑÐµÑ 'x' ÑолÑко еÑли за 'x' ÑледÑÐµÑ 'y'. ÐÑо назÑваеÑÑÑ ÑпÑеждение.
ÐапÑимеÑ, |
x(?!y)
|
СооÑвеÑÑÑвÑÐµÑ 'x' ÑолÑко еÑли за 'x' не ÑледÑÐµÑ 'y'. ÐÑо назÑваеÑÑÑ Ð¾ÑÑиÑаÑелÑное ÑпÑеждение.
ÐапÑимеÑ, |
x|y
|
СооÑвеÑÑÑвÑÐµÑ Ð»Ð¸Ð±Ð¾ 'x' либо 'y'.
ÐапÑимеÑ, |
{n}
|
n - положиÑелÑное Ñелое. СооÑвеÑÑÑвÑÐµÑ Ñовно
ÐапÑимеÑ, |
{n,m}
|
m и n - положиÑелÑнÑе ÑелÑе. СооÑвеÑÑÑвÑÐµÑ ÐºÐ°Ðº минимÑм
ÐапÑимеÑ, |
[xyz]
|
ÐÐ°Ð±Ð¾Ñ Ñимволов. СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð· пеÑеÑиÑленнÑÑ
. Ðожно
ÑказаÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ñимволов, иÑполÑзÑÑ ÑиÑе. СпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ (как
ÑоÑка (
ÐапÑимеÑ, |
[^xyz]
|
ÐнвеÑÑиÑованнÑй или дополнÑÑÑий Ð½Ð°Ð±Ð¾Ñ Ñимволов. ÐÑо ознаÑÐ°ÐµÑ ÑооÑвеÑÑÑвие вÑемÑ, ÑÑо не в ÑÐºÐ¾Ð±ÐºÐ°Ñ . Ðожно ÑказаÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ñимволов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑиÑе. ÐÑе, ÑÑо дейÑÑвÑÐµÑ Ð² обÑÑном набоÑе Ñимволов, дейÑÑвÑÐµÑ Ð¸ здеÑÑ.
ÐапÑимеÑ, |
[\b]
|
СооÑвеÑÑÑвÑÐµÑ Ð±ÑкÑпейÑÑ (U+0008). (Ðе пÑÑаÑÑ Ñ \b.) |
\b
|
СооÑвеÑÑÑвÑÐµÑ Ð³ÑаниÑе Ñлова. ÐÑаниÑа Ñлова ÑооÑвеÑÑÑвÑÐµÑ Ð¿Ð¾Ð·Ð¸Ñии, где
за Ñимволом Ñлова не ÑледÑÐµÑ Ð´ÑÑгой Ñимвол Ñлова или пÑедÑеÑÑвÑÐµÑ ÐµÐ¼Ñ.
ÐÑмеÑим, ÑÑо гÑаниÑа Ñлова не вклÑÑаеÑÑÑ Ð² ÑооÑвеÑÑÑвие. ÐÑÑгими
Ñловами, длина ÑопоÑÑавленной гÑаниÑÑ Ñлова Ñавна нÑлÑ. (Ðе пÑÑаÑÑ Ñ
ÐÑимеÑÑ: Note: JavaScript's regular expression engine defines a specific set of charactersto be "word" characters. Any character not in that set is considered a word break. This set of characters is fairly limited: it consists solely of the Roman alphabet in both upper- and lower-case, decimal digits, and the underscore character. Accented characters, such as "é" or "ü" are, unfortunately, treated as word breaks. |
\B
|
СооÑвеÑÑÑвÑÐµÑ Ð½ÐµÑловообÑазÑÑÑей гÑаниÑе. ÐеÑловообÑазÑÑÑÐ°Ñ Ð³ÑаниÑа ÑооÑвеÑÑÑвÑÐµÑ Ð¿Ð¾Ð·Ð¸Ñии, в коÑоÑой пÑедÑдÑÑий и ÑледÑÑÑий ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ñимволами одного Ñипа: либо оба Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑловообÑазÑÑÑими Ñимволами, либо неÑловообÑазÑÑÑими. ÐаÑало и ÐºÐ¾Ð½ÐµÑ ÑÑÑоки ÑÑиÑаÑÑÑÑ Ð½ÐµÑловообÑазÑÑÑими Ñимволами.
ÐапÑимеÑ, |
\cX
|
Ðде X ÑвлÑеÑÑÑ Ñимволом ÑлÑÑайного вÑбоÑа из поÑледоваÑелÑноÑÑи Ð¾Ñ Ð Ð´Ð¾ Я. СооÑвеÑÑÑвÑÐµÑ ÑпÑавлÑÑÑÐµÐ¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑоке.
ÐапÑимеÑ, |
\d
|
СооÑвеÑÑÑвÑÐµÑ ÑиÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑимволÑ. ÐквиваленÑно вÑÑажениÑ
ÐапÑимеÑ, |
\D
|
СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð½ÐµÑиÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑимволÑ. ÐквиваленÑно вÑÑажениÑ
ÐапÑимеÑ, |
\f
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ñогона ÑÑÑаниÑÑ (U+000C). ÐÑобÑй Ñимвол ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑаÑÑÑ. |
\n
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÐµÑевода ÑÑÑоки (U+000A). |
\r
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа каÑеÑки (U+000D). |
\s
|
СооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð¸Ð½Ð¾ÑÐ½Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÑÑÑого пÑоÑÑÑанÑÑва, вклÑÑÐ°Ñ Ð¿Ñобел,
ÑабÑлÑÑиÑ, пÑогон ÑÑÑаниÑÑ, пеÑевод ÑÑÑоки. ÐквиваленÑен
ÐапÑимеÑ, |
\S
|
СооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð¸Ð½Ð¾ÑÐ½Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½ÐµÐ¿ÑÑÑого пÑоÑÑÑанÑÑва.
ÐквиваленÑен ÐапÑимеÑ, |
\t
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð³Ð¾ÑизонÑалÑной ÑабÑлÑÑии (U+0009). |
\v
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²ÐµÑÑикалÑной ÑабÑлÑÑии (U+000B). |
\w
|
СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑиÑÑобÑÐºÐ²ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²ÐºÐ»ÑÑÐ°Ñ Ð½Ð¸Ð¶Ð½ÐµÐµ
подÑÑÑкивание. ÐквиваленÑен
ÐапÑимеÑ, |
\W
|
СооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð½Ðµ ÑиÑÑобÑÐºÐ²ÐµÐ½Ð½Ð¾Ð¼Ñ ÑимволÑ. РавноÑилен
ÐапÑимеÑ, |
\n
|
Ðде n ÑÑо положиÑелÑное Ñелое, обÑаÑÐ½Ð°Ñ ÑÑÑлка на поÑледнÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½ÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ n , заклÑÑÑннÑÑ Ð² кÑÑглÑе Ñкобки в ÑегÑлÑÑном вÑÑажении (ÑÑиÑÐ°Ñ Ð»ÐµÐ²Ñе Ñкобки).
ÐапÑимеÑ, |
\0
|
СооÑвеÑÑÑвÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ NULL (U+0000). Ðе ÑледÑÐµÑ ÑÑавиÑÑ Ð·Ð° ним дÑÑгой
ÑиÑÑовой Ñимвол, поÑколÑÐºÑ \0<digits> ÑвлÑеÑÑÑ
воÑÑмеÑиÑной ÑкÑаниÑÑÑÑей поÑледоваÑелÑноÑÑÑÑ.
|
\xhh
|
СооÑвеÑÑÑвÑÐµÑ Ñимволам кода hh (две ÑеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑ) |
\uhhhh
|
СооÑвеÑÑÑвÑÐµÑ Ñимволам кода hhhh (ÑеÑÑÑе ÑеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑ). |
ÐкÑаниÑование полÑзоваÑелÑÑкого ввода, ÑооÑвеÑÑÑвÑÑÑего бÑквенной ÑÑÑоке внÑÑÑи ÑегÑлÑÑного вÑÑажениÑ, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑигнÑÑо пÑоÑÑой заменой:
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}
ÐÑполÑзование Ñкобок
Скобки вокÑÑг лÑбой ÑаÑÑи ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð·Ð½Ð°ÑаÑÑ ÑÑо ÑÑа ÑаÑÑÑ Ñовпадаемой подÑÑÑоки бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¾Ð¼Ð½ÐµÐ½Ð°. Раз запомнена, подÑÑÑока Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑана Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ðº ÑÑо опиÑано в Using Parenthesized Substring Matches.
ÐапÑимеÑ, паÑÑеÑн /Chapter (\d+)\.\d*/ вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑкÑаниÑÑÑÑие и ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸ ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ñо, ÑÑо ÑаÑÑÑ Ñаблона должна бÑÑÑ Ð·Ð°Ð¿Ð¾Ð¼Ð½ÐµÐ½Ð°. Ðн ÑоÑно ÑооÑвеÑÑÑвÑÐµÑ Ñимволам Ñлова 'Chapter ', за коÑоÑÑми ÑледÑÐµÑ Ð¾Ð´Ð¸Ð½ или более ÑиÑÑовÑÑ
Ñимволов (\d ознаÑÐ°ÐµÑ Ð»Ñбой ÑиÑÑовой Ñимвол, а '+' ознаÑÐ°ÐµÑ 1 или более Ñаз), за коÑоÑÑм ÑледÑÐµÑ Ð´ÐµÑÑÑиÑÐ½Ð°Ñ ÑоÑка (Ñама по Ñебе ÑвлÑÑÑаÑÑÑ ÑпеÑиалÑнÑм Ñимволом; пÑедÑеÑÑвÑÑÑий деÑÑÑиÑной ÑоÑке ÑÐ»ÐµÑ ' \' ознаÑаеÑ, ÑÑо паÑÑеÑн должен иÑкаÑÑ Ð»Ð¸ÑеÑалÑнÑй Ñимвол '.'), поÑле коÑоÑой ÑледÑÐµÑ Ð»Ñбой ÑиÑÑовой Ñимвол 0 или более Ñаз ('\d' обознаÑÐ°ÐµÑ ÑиÑÑовой Ñимвол, '*' обознаÑÐ°ÐµÑ 0 или более Ñаз). ÐÑоме Ñого, кÑÑглÑе Ñкобки иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¿ÐµÑвÑÑ
же ÑовпавÑиÑ
ÑиÑÑовÑÑ
Ñимволов.
ÐÑÐ¾Ñ Ñаблон бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½ во ÑÑазе "Open Chapter 4.3, paragraph 6" и ÑиÑÑа '4' бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¾Ð¼Ð½ÐµÐ½Ð°. Ðо он не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½ во ÑÑазе "Chapter 3 and 4", поÑколÑÐºÑ ÑÑа ÑÑÑока не Ð¸Ð¼ÐµÐµÑ ÑоÑки поÑле ÑиÑÑÑ '3'.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑопоÑÑавиÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð±ÐµÐ· вÑзова ÑовпавÑей ÑаÑÑи Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ, внÑÑÑи кÑÑглÑÑ
Ñкобок необÑ
одимо пÑедваÑиÑÑ Ð¿Ð°ÑÑеÑн ÑоÑеÑанием Ñимволов ' ?:'. ÐапÑимеÑ, Ñаблон (?:\d+) бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ более ÑиÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑимволÑ, но не Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸Ñ ÑовпавÑиÑ
Ñимволов.
РабоÑа Ñ Ð ÐµÐ³ÑлÑÑнÑми ÐÑÑажениÑми
РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² меÑодаÑ
test и exec обÑекÑа RegExp и Ñ Ð¼ÐµÑодами match, replace, search, и split обÑекÑа String. ÐÑи меÑÐ¾Ð´Ñ Ð¿Ð¾Ð´Ñобно обÑÑÑнÑÑÑÑÑ Ð² СпÑавоÑнике JavaScript
| ÐеÑод | ÐпиÑание |
|---|---|
exec |
ÐеÑод RegExp, коÑоÑÑй вÑполнÑÐµÑ Ð¿Ð¾Ð¸Ñк ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² ÑÑÑоке. Ðн возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив даннÑÑ
. |
test |
ÐеÑод RegExp, коÑоÑÑй ÑеÑÑиÑÑÐµÑ Ñовпадение в ÑÑÑоке. ÐозвÑаÑÐ°ÐµÑ Ð»Ð¸Ð±Ð¾ иÑÑÐ¸Ð½Ñ Ð»Ð¸Ð±Ð¾ ложÑ. |
match |
ÐеÑод String, коÑоÑÑй вÑполнÑÐµÑ Ð¿Ð¾Ð¸Ñк ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² ÑÑÑоке. Ðн возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив даннÑÑ
либо null еÑли ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¾ÑÑÑÑÑÑвÑÑÑ. |
search |
ÐеÑод String, коÑоÑÑй ÑеÑÑиÑÑÐµÑ Ð½Ð° Ñовпадение в ÑÑÑоке. Ðн возвÑаÑÐ°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ ÑовпадениÑ, или -1 еÑли Ñовпадений не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾. |
replace |
ÐеÑод String, коÑоÑÑй вÑполнÑÐµÑ Ð¿Ð¾Ð¸Ñк ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² ÑÑÑоке, и заменÑÐµÑ ÑовпавÑÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð´ÑÑгой подÑÑÑокой, пеÑеданной как аÑгÑÐ¼ÐµÐ½Ñ Ð² ÑÑÐ¾Ñ Ð¼ÐµÑод. |
split |
ÐеÑод String, коÑоÑÑй иÑполÑзÑÐµÑ ÑегÑлÑÑное вÑÑажение или ÑикÑиÑованнÑÑ ÑÑÑÐ¾ÐºÑ ÑÑÐ¾Ð±Ñ ÑазбиÑÑ ÑÑÑÐ¾ÐºÑ Ð½Ð° маÑÑив подÑÑÑок. |
ЧÑÐ¾Ð±Ñ Ð¿ÑоÑÑо ÑзнаÑÑ ÐµÑÑÑ Ð»Ð¸ в ÑÑÑоке ÑÑо либо ÑооÑвеÑÑÑвÑÑÑее ÑаблонÑ, воÑполÑзÑйÑеÑÑ Ð¼ÐµÑодами test или search; а ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð±Ð¾Ð»ÑÑе инÑоÑмаÑии полÑзÑйÑеÑÑ Ð¼ÐµÑодами exec или match (Ñ
оÑÑ ÑÑи меÑÐ¾Ð´Ñ ÑабоÑаÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ). ÐÑли Ð²Ñ Ð¿Ð¾Ð»ÑзÑеÑеÑÑ exec или match и еÑли ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÐµÑÑÑ, ÑÑи меÑÐ¾Ð´Ñ Ð²ÐµÑнÑÑ Ð¼Ð°ÑÑив и обновлÑннÑе ÑвойÑÑва обÑекÑа аÑÑоÑииÑованного ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð° Ñакже пÑедопÑеделÑнного обÑекÑа RegExp ÑегÑлÑÑного вÑÑажениÑ. ÐÑли Ñовпадений неÑ, меÑод exec веÑнÑÑ null (коÑоÑÑй ÑконвеÑÑиÑÑеÑÑÑ Ð² false).
Ð Ñлед. пÑимеÑе, ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзÑÐµÑ Ð¼ÐµÑод exec ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² ÑÑÑоке.
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
ÐÑли вам не нÑжен доÑÑÑп к ÑвойÑÑвам ÑегÑлÑÑного вÑÑажениÑ, Ñо алÑÑеÑнаÑивнÑй ÑпоÑоб полÑÑиÑÑ myArray можно Ñак:
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑконÑÑÑÑиÑоваÑÑ ÑегÑлÑÑное вÑÑажение из ÑÑÑоки, дÑÑгой ÑпоÑоб ÑделаÑÑ ÑÑо пÑиведÑн ниже:
var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
С помоÑÑÑ ÑÑÐ¸Ñ ÑкÑипÑов, поиÑк ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив и обновлÑннÑе ÑвойÑÑва показаннÑе в Ñлед. ÑаблиÑе.
| ÐбÑÐµÐºÑ | СвойÑÑво или Ð¸Ð½Ð´ÐµÐºÑ | ÐпиÑание | Ð ÑÑом пÑимеÑе. |
|---|---|---|---|
myArray |
СовпавÑÐ°Ñ ÑÑÑока и вÑе запомненнÑе подÑÑÑоки. | ["dbbd", "bb"] |
|
index |
ÐÐ½Ð´ÐµÐºÑ ÑовпавÑей подÑÑÑоки (Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð°ÑинаеÑÑÑ Ñ Ð½ÑлÑ). | 1 |
|
input |
ÐÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑока. | "cdbbdbsbz" |
|
[0] |
ÐоÑледние ÑовпавÑие ÑимволÑ. | "dbbd" |
|
myRe |
lastIndex |
ÐÐ½Ð´ÐµÐºÑ Ñ ÐºÐ¾ÑоÑого наÑнÑÑÑÑ Ñлед. поиÑк ÑовпадениÑ. (ÐÑо ÑвойÑÑво опÑеделÑеÑÑÑ ÑолÑко еÑли ÑегÑлÑÑное вÑÑажение иÑполÑзÑÐµÑ Ð¿Ð°ÑамеÑÑ g, опиÑаннÑй в [Advanced Searching With Flags](#Advanced_Searching_With_Flags).) | 5 |
source |
ТекÑÑ Ñаблона. ÐбновлÑеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑегÑлÑÑного вÑÑажениÑ, а не во вÑÐµÐ¼Ñ Ð²ÑполнениÑ. | "d(b+)d" |
Ðак показано во вÑоÑом ваÑианÑе ÑÑого пÑимеÑа, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑегÑлÑÑное вÑÑажение, Ñозданное пÑи помоÑи иниÑиализаÑоÑа обÑекÑа, без пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ пеÑеменной. Таким обÑазом, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе даннÑÑ ÑоÑÐ¼Ñ Ð·Ð°Ð¿Ð¸Ñи без пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменной, Ñо в пÑоÑеÑÑе далÑнейÑего иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ Ð½Ðµ можеÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑвойÑÑвам данного ÑегÑлÑÑного вÑÑажениÑ. ÐапÑимеÑ, Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑледÑÑÑий ÑкÑипÑ:
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);
ÐÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ Ð²ÑведеÑ:
The value of lastIndex is 5
Ðднако, еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑледÑÑÑий ÑкÑипÑ:
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
Ðн вÑведеÑ:
The value of lastIndex is 0
Ð¡Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ /d(b+)d/g в двÑÑ
ÑлÑÑаÑÑ
ÑвлÑÑÑÑÑ ÑазнÑми обÑекÑами ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸, ÑледоваÑелÑно, имеÑÑ ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑвойÑÑва lastIndex. ÐÑли вам необÑ
одим доÑÑÑп к ÑвойÑÑвам обÑекÑа, Ñозданного пÑи помоÑи иниÑиализаÑоÑа, Ñо Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑнаÑала пÑиÑвоиÑÑ ÐµÐ³Ð¾ пеÑеменной.
ÐÑполÑзование ÑкобоÑнÑÑ Ð²ÑÑажений Ð´Ð»Ñ Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑÑÑок
ÐÑполÑзование Ñкобок в Ñаблоне ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²Ð»ÐµÑÑÑ "запоминание" ÑовпавÑей подÑÑÑоки. ÐÐ»Ñ Ð¿ÑимеÑа, /a(b)c/ вÑÐ·Ð¾Ð²ÐµÑ Ñовпадение 'abc' и Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸Ñ 'b'. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÑкобоÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑйÑе Array elements [1], ..., [n].
ЧиÑло возможнÑÑ ÑкобоÑнÑÑ Ð¿Ð¾Ð´ÑÑÑок неогÑаниÑено. ÐозвÑаÑаемÑй маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð²Ñе полÑÑеннÑе ÑовпадениÑ, ÑдовлеÑвоÑÑÑÑие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÐºÐ¾Ð±ÐºÐ°Ñ . СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÐºÐ°Ðº иÑполÑзоваÑÑ ÑкобоÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑÑÑок.
СледÑÑÑий ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзÑÐµÑ Ð¼ÐµÑод replace(), ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¼ÐµÐ½ÑÑÑ Ð¼ÐµÑÑами Ñлова (ÑимволÑ) в ÑÑÑоке. ÐÐ»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ ÑекÑÑа ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзÑÐµÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ $1 и $2 Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвого и вÑоÑого ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÑкобоÑного вÑÑажениÑ.
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
ÐÑÐ²ÐµÐ´ÐµÑ "Smith, John".
РаÑÑиÑеннÑй поиÑк Ñ Ñлагами
РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÑÑ ÑеÑÑÑе опÑионалÑнÑÑ Ñлага, коÑоÑÑе делаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм глобалÑнÑй и ÑегиÑÑÑонезавиÑимÑй поиÑк. Флаги могÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑамоÑÑоÑÑелÑно или вмеÑÑе в лÑбом поÑÑдке, а Ñакже могÑÑ ÑвлÑÑÑÑÑ ÑаÑÑÑÑ ÑегÑлÑÑного вÑÑажениÑ.
| Flag | Description |
|---|---|
g |
ÐлобалÑнÑй поиÑк. |
| i | РегиÑÑÑонезавиÑимÑй поиÑк. |
| m | ÐногоÑÑÑоÑнÑй поиÑк. |
| y | ÐÑполнÑÐµÑ Ð¿Ð¾Ð¸Ñк наÑÐ¸Ð½Ð°Ñ Ñ Ñимвола, коÑоÑÑй Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð½Ð° позиÑии ÑвойÑÑва lastindex ÑекÑÑего ÑегÑлÑÑного вÑÑажениÑ. |
ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ñлаги в Ñаблоне ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑйÑе ÑледÑÑÑий ÑинÑакÑиÑ:
var re = /pattern/flags;
или
var re = new RegExp("pattern", "flags");
ÐбÑаÑиÑе внимание, ÑÑо Ñлаги ÑвлÑÑÑÑÑ Ð½ÐµÐ¾ÑÑемлемой ÑаÑÑÑÑ ÑегÑлÑÑного вÑÑажениÑ. Флаги не могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¸Ð»Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.
ÐÐ»Ñ Ð¿ÑимеÑа, re = /\w+\s/g ÑоздаÑÑ ÑегÑлÑÑное вÑÑажение, коÑоÑое иÑÐµÑ Ð¾Ð´Ð¸Ð½ или более Ñимволов, поÑле коÑоÑÑÑ
ÑледÑÐµÑ Ð¿Ñобел и иÑÐµÑ Ð´Ð°Ð½Ð½Ð¾Ðµ Ñовпадение на пÑоÑÑжении вÑей ÑÑÑоки.
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
ÐÑÐ²ÐµÐ´ÐµÑ ["fee ", "fi ", "fo "]. Ð ÑÑом пÑимеÑе Ð²Ñ Ð±Ñ Ð¼Ð¾Ð³Ð»Ð¸ замениÑÑ ÑÑÑокÑ:
var re = /\w+\s/g;
на ÑледÑÑÑÑÑ:
var re = new RegExp("\\w+\\s", "g");
и полÑÑиÑÑ ÑÐ¾Ñ Ð¶Ðµ ÑезÑлÑÑаÑ.
Флаг m иÑполÑзÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð²Ñ
Ð¾Ð´Ð½Ð°Ñ ÑÑÑока ÑаÑÑмаÑÑивалаÑÑ ÐºÐ°Ðº многоÑÑÑоÑнаÑ. ÐÑли Ñлаг m иÑполÑзÑеÑÑÑ, Ñо ^ и $ вÑÐ·Ð¾Ð²ÐµÑ Ñовпадение в наÑале или конÑе лÑбой ÑÑÑоки в ÑÑÑоке ввода вмеÑÑо наÑала или конÑа вводимой ÑÑÑоки Ñеликом.
ÐÑимеÑÑ
След. пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð¸ÑполÑзование ÑегÑлÑÑнÑÑ Ð²ÑÑажений.
Ðзменение поÑÑдка в ÐÑÑ Ð¾Ð´Ð½Ð¾Ð¹ СÑÑоке
След. пÑÐ¸Ð¼ÐµÑ Ð¸Ð»Ð»ÑÑÑÑиÑÑÐµÑ ÑоÑмиÑование ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ иÑполÑзование string.split() и string.replace(). Ðн оÑиÑÐ°ÐµÑ Ð½ÐµÐ¿ÑавилÑно ÑÑоÑмаÑиÑованнÑÑ Ð¸ÑÑ
однÑÑ ÑÑÑокÑ, коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð° в непÑавилÑном поÑÑдке (Ð¸Ð¼Ñ Ð¸Ð´ÑÑ Ð¿ÐµÑвÑм) ÑазделÑннÑе пÑобелами, ÑабÑлÑÑией и одной ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой. РконÑе, изменÑеÑÑÑ Ð¿Ð¾ÑÑдок ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼Ñн (ÑÐ°Ð¼Ð¸Ð»Ð¸Ñ ÑÑÐ°Ð½ÐµÑ Ð¿ÐµÑвой) и ÑоÑÑиÑÑеÑÑÑ ÑпиÑок.
// The name string contains multiple spaces and tabs,
// and may have multiple spaces between first and last names.
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var output = ["---------- Original String\n", names + "\n"];
// Prepare two regular expression patterns and array storage.
// Split the string into array elements.
// pattern: possible white space then semicolon then possible white space
var pattern = /\s*;\s*/;
// Break the string into pieces separated by the pattern above and
// store the pieces in an array called nameList
var nameList = names.split(pattern);
// new pattern: one or more characters then spaces then characters.
// Use parentheses to "memorize" portions of the pattern.
// The memorized portions are referred to later.
pattern = /(\w+)\s+(\w+)/;
// New array for holding names being processed.
var bySurnameList = [];
// Display the name array and populate the new array
// with comma-separated names, last first.
//
// The replace method removes anything matching the pattern
// and replaces it with the memorized stringâsecond memorized portion
// followed by comma space followed by first memorized portion.
//
// The variables $1 and $2 refer to the portions
// memorized while matching the pattern.
output.push("---------- After Split by Regular Expression");
var i, len;
for (i = 0, len = nameList.length; i < len; i++) {
output.push(nameList[i]);
bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
}
// Display the new array.
output.push("---------- Names Reversed");
for (i = 0, len = bySurnameList.length; i < len; i++) {
output.push(bySurnameList[i]);
}
// Sort by last name, then display the sorted array.
bySurnameList.sort();
output.push("---------- Sorted");
for (i = 0, len = bySurnameList.length; i < len; i++) {
output.push(bySurnameList[i]);
}
output.push("---------- End");
console.log(output.join("\n"));
ÐÑполÑзование ÑпеÑÑимволов Ð´Ð»Ñ Ð¿ÑовеÑки Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ
Ð Ñлед. пÑимеÑе, ожидаеÑÑÑ ÑÑо полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ´ÑÑ ÑелеÑоннÑй Ð½Ð¾Ð¼ÐµÑ Ð¸ ÑÑебÑеÑÑÑ Ð¿ÑовеÑиÑÑ Ð¿ÑавилÑноÑÑÑ Ñимволов набÑаннÑÑ Ð¿Ð¾Ð»ÑзоваÑелем. Ðогда полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð¶Ð¼ÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ "Check", ÑкÑÐ¸Ð¿Ñ Ð¿ÑовеÑÐ¸Ñ Ð¿ÑавилÑноÑÑÑ Ð²Ð²ÐµÐ´Ñнного номеÑа. ÐÑли Ð½Ð¾Ð¼ÐµÑ Ð¿ÑавилÑнÑй (ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ñимволами опÑеделÑннÑми в ÑегÑлÑÑном вÑÑажении), Ñо ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ ÑообÑение благодаÑноÑÑи Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ подÑвеÑÐ´Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ. ÐÑли неÑ, Ñо ÑкÑÐ¸Ð¿Ñ Ð¿ÑоинÑоÑмиÑÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑÑо ÑелеÑоннÑй Ð½Ð¾Ð¼ÐµÑ Ð½ÐµÐ¿ÑавилÑнÑй.
ÐнÑÑÑи незаÑ
ваÑÑваÑÑиÑ
Ñкобок (?:, ÑегÑлÑное вÑÑажение иÑÐµÑ ÑÑи ÑиÑÑÑ \d{3} ÐÐÐ | оÑкÑÑваÑÑÑÑ ÑÐºÐ¾Ð±ÐºÑ \(, заÑем ÑÑи ÑиÑÑÑ \d{3}, заÑем закÑÑваÑÑÑÑ ÑÐºÐ¾Ð±ÐºÑ \), (закÑÑваÑÑÐ°Ñ Ð½ÐµÐ·Ð°Ñ
ваÑÑваÑÑÐ°Ñ Ñкобка )), заÑем ÑиÑе, ÑлеÑ, или деÑÑÑиÑÐ½Ð°Ñ ÑоÑка, и когда ÑÑо вÑÑажение найдено, Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ Ñимвол ([-\/\.]), ÑледÑÑÑие за ним и запомненнÑе ÑÑи ÑиÑÑÑ \d{3}, ÑледÑÑÑее ÑооÑвеÑÑÑвие ÑиÑе, ÑлеÑа или деÑÑÑиÑной ÑоÑки \1, и ÑледÑÑÑие ÑеÑÑÑе ÑиÑÑÑ \d{4}.
РегÑлÑÑное вÑÑажение иÑÐµÑ ÑнаÑала 0 или Ð¾Ð´Ð½Ñ Ð¾ÑкÑÑваÑÑÑÑ ÑÐºÐ¾Ð±ÐºÑ \(?, заÑем ÑÑи ÑиÑÑÑ \d{3}, заÑем 0 или Ð¾Ð´Ð½Ñ Ð·Ð°ÐºÑÑваÑÑÑÑ ÑÐºÐ¾Ð±ÐºÑ \)?, поÑом одно ÑиÑе, ÑÐ»ÐµÑ Ð¸Ð»Ð¸ ÑоÑка и когда найдÑÑ ÑÑо, Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸Ñ Ñимвол ([-\/\.]), Ñлед. ÑÑи ÑиÑÑÑ \d{3}, followed by the remembered match of a dash, forward slash, or decimal point \1, followed by four digits \d{4}.
СобÑÑие "ÐзмениÑÑ" акÑивиÑÑеÑÑÑ, когда полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð´ÑвеÑÐ´Ð¸Ñ Ð²Ð²Ð¾Ð´ знаÑÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑажениÑ, нажав клавиÑÑ "Enter".
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript">
var re = /\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/;
function testInfo(phoneInput) {
var OK = re.exec(phoneInput.value);
if (!OK)
window.alert(RegExp.input + " isn't a phone number with area code!");
else window.alert("Thanks, your phone number is " + OK[0]);
}
</script>
</head>
<body>
<p>
Enter your phone number (with area code) and then click "Check". <br />The
expected format is like ###-###-####.
</p>
<form action="#">
<input id="phone" /><button
onclick="testInfo(document.getElementById('phone'));">
Check
</button>
</form>
</body>
</html>