Regex связанных путаницы - PullRequest
       0

Regex связанных путаницы

0 голосов
/ 16 января 2019

Я хотел бы извлечь mkghj.bmg и pp.kp из следующей строки, используя регулярное выражение, используемое в javascript

avb@gh.lk mkghj.bmg ,,,,fsdsdf.fdfd pllk.kp sdfsdf.bb,,,, pp.kp

Все, что заключено в ,,,, нужно игнорировать. Может быть несколько экземпляров ,,,, но они всегда будут встречаться в строке четное количество раз (не вхождение также возможно).

Кроме того, avb@gh.lk имеет знак @, поэтому его следует игнорировать

Полагаю, я ищу следующее правило: если есть точка (.), Посмотрите вперед и посмотрите назад: -

  1. Если точка заключена внутри ,,,, то игнорировать ее
  2. Если перед точкой стоит @ без пробела между точкой и @, игнорируйте ее
  3. Во всех других случаях перехватывайте непрерывный набор символов (пока не встретите пробел) по обе стороны от точки

Я придумал это регулярное выражение, но это бесполезно

[^\, ]+([^@ \,]+\w+)[^\, ]+

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы можете заменить строку между ,,, на '', а затем, оставшиеся, вы можете разделить и найти @ знак и фильтр.

let str = `avb@gh.lk mkghj.bmg ,,,,fsdsdf.fdfd pllk.kp sdfsdf.bb,,,, pp.kp`

let op = str.replace(/,,,.*?,,,,|/g,'').split(' ').filter(e=> !e.includes('@') && e );

console.log(op)
0 голосов
/ 16 января 2019

Вообще говоря, (помните группу захвата):

not_this | neither_this_nor_this | (but_this_interesting_stuff)


Для вашего конкретного примера это может быть
,,,,.*?,,,,|\S+@\S+|(\S+)

Вам необходимо проверить наличие группы 1, см. демонстрацию на regex101.com .


В JS это будет:

var myString = "avb@gh.lk mkghj.bmg ,,,,fsdsdf.fdfd pllk.kp sdfsdf.bb,,,, pp.kp";
var myRegexp = /,,,,.*?,,,,|\S+@\S+|(\S+)/g;
match = myRegexp.exec(myString);
while (match != null) {
    if (typeof(match[1]) != 'undefined') {
        console.log(match[1]);
    }
match = myRegexp.exec(myString);
}
0 голосов
/ 16 января 2019

Regex

^[^ ]+ ([^ ]+) ,,,,.*,,,,\s+(.*)

Описание

^ asserts position at start of a line
    Match a single character not present in the list below [^ ]+
    + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
      matches the character   literally (case sensitive)
      matches the character   literally (case sensitive)
    1st Capturing Group ([^ ]+)
        Match a single character not present in the list below [^ ]+
        + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
          matches the character   literally (case sensitive)
     ,,,, matches the characters  ,,,, literally (case sensitive)
    .* matches any character (except for line terminators)
        * Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
    ,,,, matches the characters ,,,, literally (case sensitive)
    \s+ matches any whitespace character (equal to [\r\n\t\f\v ])
        + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
    2nd Capturing Group (.*)
        .* matches any character (except for line terminators)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...