Помогите с регулярным выражением в "крестиках-ноликах".
Пытаюсь поиграть в крестики-нолики с помощью регулярных выражений.
Есть такое поле: "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, время: 04:06. |