Як, до біса, я їх вирішую?
Як і будь-яка нова річ:
10 Study
20 Practice
30 goto 10
Вивчення
Я вважаю, що більшість успішних вчителів починають викладати будь-який предмет, спочатку надаючи трохи передумови. Важливо мати контекст того, що ви вивчаєте, і, що найголовніше, чому ви це вивчаєте.
Це все відповідність рядків
Регулярні вирази - це засіб узгодження шаблонів у тексті. Це сама декларативна мова, включена в численні інші мови програмування.
Я хотів би підкреслити, що це декларативна мова, регулярні вирази корисні для вираження того, який рядок повинен відповідати, але вони жодним чином не виражають, яким чином програма повинна робити відповідність. З цієї причини можна використовувати регулярні вирази дуже швидко і дуже повільно на одній і тій же мові програмування просто за допомогою іншого аналізатора RegEx.
Причина створення регулярних виразів однакова для створення більшості мов програмування: програмісти знову і знову виконували однакові складні завдання, і вирішили, що хочуть спростити спосіб написання коду.
Деякі з них (і повинні) скаржитися на моє попереднє речення, кажучи щось за принципом:
RegEx не робить програму простішою.
це правда
RegEx не робить програму простішою, RegEx робить написання програми простішим. Ви все ще повинні бути ретельними у своєму тестуванні, щоб бути впевненим, що всі правильні випадки зібрані правильно, а всі неправильні випадки - ні. Тестувати "всіх" справді важко, а зі складними візерунками справді важко перевірити "найбільше". У гіршому випадку, ви все-таки повинні протестувати "деякі" випадки.
дозволяє включити кілька прикладів. Я обов'язково вибрав RegEx-механізм JavaScript, тому що я можу легко перевірити його в браузері і тому, що мені не доведеться робити жодних рядків під час використання RegEx-літералів.
Коли ви робите звичайне зіставлення рядків, ви перевіряєте одне значення рядка на інше. Вони можуть надходити з будь-якого місця, але, врешті-решт, для порівняння потрібні дві нитки:
if ( 'foo' == 'bar' ) doSomething();
Цей приклад відстійний, оскільки він ніколи нічого не зробить
if ( foo == 'bar' ) doSomething();
Значно краще; Зараз ми фактично не знаємо достроково, чи щось буде зроблено. Тепер ми можемо почати приймати дані користувача:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Чудово, що тепер користувачі можуть ввести інформацію, bar
і щось станеться, поки ви не отримаєте повідомлення про помилки від користувачів, які говорять, що "bar"
це не працює, або що "BAR" не працює, або що вони набрали BRA
100 разів і ніколи нічого не трапляється.
Ігноруючи неправильні написання та зайві символи, 'bar' != 'BAR'
і програмістам потрібно придумати спосіб тестування, де символи неправильні.
Просте рішення, використання toLowerCase
. Це чудово працює, але що робити з нашими користувачами, які використовують англійську англійську, ніж американську англійську, коли ви відповідаєте something == 'color'
? Тепер вам доведеться відповідати something == 'color' || somthing == 'colour'
.
Короткий простий короткий простий шаблон дуже швидко перетворюється на безліч повторюваних кодів.
Приклад кольорів може бути просто узгоджений з:
/colou?r/.test( something )
ґрунтовне розуміння основ регулярних виразів може значно зменшити кількість часу, який ви витрачаєте на винахід колеса.
Де вчитися
Більшість мов, які реалізують регулярні вирази, мають принаймні один ресурс для певного синтаксису використання регулярних виразів у межах цієї мови. Один для JavaScript можна знайти на MDN
читати.
все це.
потім прочитайте його ще раз.
Навчатися потрібно час, подумайте про це як на інвестицію: година, щоб вивчити RegEx, економить годину, коли наступного разу вам потрібно виконати узгодження рядка, а потім наступну годину наступного разу після цього.
Практика
Прочитавши все про RegEx, ви, мабуть, не будете розуміти більшість із цього. Це тому, що ви насправді нічого не робите з цим.
Я згадав, чому я вибрав JS для цього прикладу, закликаю вас зіпсуватись із ним у вашому браузері. Це швидко, і ви можете це зробити прямо у своєму URL-рядку.
У JS є кілька різних і простих способів використання RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Починаючи з чогось простого, як-от:
javascript:'color'.match(/colou?r/);
це простий спосіб отримати ногу у двері. Пограйте з ним, розбийте його, щоб побачити, що відповідає, а що ні.
Коли ви зациклюєтесь на практиці, продовжуйте це робити 30
. Потрібно читати, щоб дізнатися більше, але потрібно практикуватись, щоб по-справжньому зрозуміти те, що ви дізналися.