Помогите с регулярным выражением в "крестиках-ноликах".
Пытаюсь поиграть в крестики-нолики с помощью регулярных выражений.
Есть такое поле: "0X0\nX0*\n***". Если его напечатать видно, что нолики готовятся выиграть по диагонали. Я хочу найти поле (последняя звёздочка), которое идёт после двух крестиков, которые идут по диагонали. С помощью регулярного выражения. Вот такое - работает: alert("0X0\nX0*\n***".match(/(?<=0.{2}\n.{1}0.{1}\n.{2})\*/gi)) А такое - нет: alert("0X0\nX0*\n***".match(/(?<=([X0]).{2}\n.{1}\1.{1}\n.{2})\*/gi)) Два вопроса: 1. Почему так? 2. Как сделать так, чтобы второе выражение сработало? |
jaroslav.tavgen,
так как смотрим назад, то сначала копия и потом образец. alert("aac".match(/(?<=\1(\w))\w/gi)); |
Цитата:
alert("aaс".match(/(\w)\1/gi)); |
Цитата:
alert("caa".match(/(\w)\1/gi)); |
jaroslav.tavgen,
alert("aac".match(/(?<=\1(\w))\w/gi)) тоже самое что alert("caa".match(/\w(?=(\w)\1)/gi)); |
рони, где всем этим премудростям лучше всего учиться? А то чувствую, что в регулярных выражениях есть много не только того, чего я не знаю, но и того, что я не знаю, что я не знаю...
|
Цитата:
"aac".replace(/(?<=\1(\w))\w/gi , (...a) => console.log(a)); "caa".replace(/\w(?=(\w)\1)/gi , (...a) => console.log(a)); |
Цитата:
|
Цитата:
/(?<=\1(\w))\w/ Мы берем букву, которая стоит после двух букв, но первая из этих двух букв, такая же как вторая |
Часовой пояс GMT +3, время: 11:54. |