Тире в набори от символи в регулярни изрази на JavaScript
Тирето - също е специален символ вътре в [ ]
(а отвън - не е). Ако имате нужда от самото
тире като символ - го поставете там,
където няма да бъде възприето като разделител
на група.
Защо това е важно: можете да създадете група
от символи, без самите да го забележите. Например,
ето така - '[:-@]' - вие мислите, че
избирате две точки, тире и знак @, а всъщност
се получава група от символи между
: и @. В тази група влизат
следните символи: ? < = > : ;
Откъде са дошли? От таблицата ASCII - две точките има по-малък номер от знака @ - и се получава група. Тоест всички групи се получават според таблицата ASCII (ако желаете можете да използвате това).
Как да се борим с това: поставете символа тире
там, където със сигурност няма да бъде възприет като
символ на група, например, в началото или в края
(тоест след [ или преди ]).
Можете също да екранирате тирето - тогава
то ще означава само себе си независимо от
позицията. Например, вместо [:-@] да напишете
[:\-@] - и вече няма да има група, а
ще има три символа - две точки, тире и знак
@.
Пример
В следващия пример шаблонът за търсене е такъв:
цифра 1, следвана от буква от 'a'
до 'z', следвана от цифра 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
В резултат във променливата ще се запише следното:
'! 1-2 ! !'
Пример
Нека сега екранираме тирето. В резултат
шаблонът за търсене е такъв: цифра 1, следвана от
буква 'a', или тире, или буква 'z',
следвана от цифра 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
В резултат във променливата ще се запише следното:
'! ! 1c2 !'
Пример
Можете просто да преместите тирето, без да го екранирате:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
В резултат във променливата ще се запише следното:
'! ! 1c2 !'
Пример
В следващия пример шаблонът за търсене е такъв:
първият символ - това са малки букви или
тире '-', следвани от две букви 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
В резултат във променливата ще се запише следното:
'! Axx ! @xx'
Пример
В следващия пример шаблонът за търсене е такъв:
първият символ - това са малки, главни
букви или тире '-', следвани от две букви
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
В резултат във променливата ще се запише следното:
'! ! ! @xx'
Пример
Можете да поставите тирето между две групи - там то със сигурност още няма да създаде друга група:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
В резултат във променливата ще се запише следното:
'! ! ! @xx'
Практически задачи
Даден е низ:
let str = 'xaz xBz xcz x-z x@z';
Намерете всички низове по следния шаблон:
буква 'x', главна или малка
буква или тире, буква 'z'.
Даден е низ:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Намерете всички низове по следния шаблон:
буква 'x', следвана от долар, или
тире, или плюс, следвана от буква 'z'.