Помогите с регулярным выражением в "крестиках-ноликах"
Прошу прощения: в соседнем сообщении неправильный заголовок, поэтому продублировал.
Пытаюсь поиграть в крестики-нолики с помощью регулярных выражений. Есть такое поле: "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. Как сделать так, чтобы второе выражение сработало? |
С помощью рони в соседней теме понял, что при использовании "?<=" регулярное выражение, оказывается, читается справа налево, и поэтому нужно писать так:
alert("0X0\nX0*\n***".match(/(?<=(\1).{2}\n.{1}[X0].{1}\n.{2})\*/gi)) И где логика? |
jaroslav.tavgen,
в данном случае лучше вычислять логически или по шаблону всех выигрышных комбинаций если их мало (тут всего 8), а не match. https://javascript.ru/forum/misc/801...tml#post523960 |
Но... Я вообще не понял как это работает. Т.е. я вижу, что это работает, но вообще не понимаю КАК.
Каким образом данный код (ниже) понял, что "\1" - это именно [X0]? Я ведь даже его скобками не выделял. Почему не "." или "\n"? alert("0X0\nX0*\n***".match(/(?<=(\1).{2}\n.{1}[X0].{1}\n.{2})\*/gi)) |
Цитата:
|
Часовой пояс GMT +3, время: 20:48. |