регулярное выражение javascript найти слова, содержащие только одну точку - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть программа:

var str = "ac.def=1 and xy.z.kt='10' and k.t=1 or xy.z.kt.lm='10'";
var regex = new RegExp('^[a-zA-Z0-9,]*[.]{1}[^=]');
var result = str.split(" ").filter((elem, index) => {
    return regex.test(elem);
})

console.log(result);

Я получаю результат как: ["ac.def=1", "xy.z.kt='10'", "k.t=1", "xy.z.kt.lm='10'"]

, но мне нужно получить только: ["abc.def=1", "k.t=1"]


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

Пожалуйста, будьте осторожны при пометкевопрос как возможный дубликат официальных документов.В противном случае мы должны закрыть все вопросы о регулярных выражениях, поскольку Изучение регулярных выражений достаточно, чтобы решить все проблемы с регулярными выражениями.Верно?

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать регулярное выражение /^[^.]*\.[^.]*$/:

var str = "ac.def=1 and xy.z.kt='10' and k.t=1 or xy.z.kt.lm='10'";
var regex = /^[^.]*\.[^.]*$/;
var result = str.split(" ").filter((elem, index) => {
    return regex.test(elem);
})

console.log(result);

Детали шаблона

  • ^ - начало строки
  • [^.]* - 0+ символы, отличные от .
  • \. - точка
  • [^.]* - 0+ символов
  • $ - конец строки.

См. Демонстрационную версию регулярных выражений .

Альтернатива, решение с одним регулярным выражением

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

/(?:^|\s)([^.\s]*\.[^.\s]*)(?!\S)/g

См. демонстрационное регулярное выражение .

Подробности

  • (?:^|\s) - группа без захвата, соответствующая началу строки или пробела
  • ([^.\s]*\.[^.\s]*) - группа захвата 1:
    • [^.\s]* - 0+ символов, отличных от . и пробелов
    • \. - точка
    • [^.\s]* - 0+ символов, отличных от. и пробел
  • (?!\S) - без пробелов не допускается сразу справа от текущего местоположения (пробел или конец строки могут появляться справа)

JS демо:

var s = "ac.def=1 and xy.z.kt='10' and k.t=1 or xy.z.kt.lm='10'";
var results = [];
s.replace(/(?:^|\s)([^.\s]*\.[^.\s]*)(?!\S)/g, ($0, $1) => results.push($1));
console.log(results);

Если перед = должна быть одна точка, используйте

/^[^.=]*\.[^.=]*=/

в своем коде.Смотрите regex demo .Разница в том, что регулярное выражение больше не имеет $ в конце, = в конце, так как этого достаточно, чтобы прекратить проверять там, и = символы добавляются в классы отрицательных символов, чтобы предотвратить их сопоставление по всемуэти символы.

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