Узнать о регулярных выражениях? - PullRequest
3 голосов
/ 21 июля 2011

В ответ на один из моих вопросов кто-то написал:

// could replace it with an easier to work with delimiter
str.replace(/(;)(?![";"])/g, '|')

// or split it, but skip over results that are just a ;
var strArr = str.split(/(;)(?![";"])/);
for (s in strArr) {
    if (strArr[s] !== ";") {
        // do something with strArr[s]
        console.log(strArr[s]);
    }
}

Я полностью потерян в /(;)(?![";"])/.Для меня это выглядит как набор случайных символов :(.

Где я могу узнать больше о синтаксисе регулярных выражений?

Ответы [ 4 ]

6 голосов
/ 21 июля 2011

Существуют различные ресурсы:

Относительно фактического выражениясимволы / отмечают начало и конец литерала регулярного выражения (как в кавычках для строки, хотя за окончанием / могут следовать флаги), а затем:

+------------- 1
     |+------------ 2
     ||+----------- 3
     ||| +--------- 4
     ||| |
     ||| |
     ||| | +------- 5
     ||| | | +----- 6
     ||| | | | +--- 7
     ||| | | | |+-- 8
     |||/ \|/ \||
    /(;)(?![";"])/
  1. ( запускает группу захвата в этом случае (потому что ( не сопровождается ?, = или !, которые изменяют то, что он делает)
  2. ;является литералом, он соответствует точке с запятой
  3. ) завершает группу захвата
  4. (?! Запускает «отрицательный прогноз», поэтому общее выражение совпадает, только если то, что находится внутри скобок, непосле точки с запятой
  5. [ начинается класс символов, который соответствует любому символувнутри него
  6. ";" - символы в классе символов.(Второй " является избыточным.) Класс содержит символы ; и ".
  7. ] завершает класс символов
  8. ) завершает начатый отрицательный просмотрв # 4

Итак, в целом, сопоставьте (и перехватите) точку с запятой, если сразу за ней не следует кавычка или точка с запятой.Я не вижу какой-либо конкретной причины для захвата точки с запятой, но, возможно, была причина в контексте вопроса, где это было рекомендовано.

2 голосов
/ 21 июля 2011

У меня есть шпаргалка от visibone , к которой я часто обращаюсь.Я нашел это действительно полезным

1 голос
/ 21 июля 2011

Взгляните на http://www.regular -expressions.info / lookaround.html

Действительно сбивающим с толку битом в этом регулярном выражении является отрицательная заглядывающая часть, которая в javascript представлена ​​с использованием синтаксиса (?! ... ). Как только вы это поймете, все остальное будет довольно тривиально.

0 голосов
/ 10 февраля 2017

Лучший способ научиться чему-либо - это делать.Вот простой тестер, который позволит вам увидеть, что делают выражения: https://regex101.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...