Вы можете использовать регулярное выражение /^[^.]*\.[^.]*$/
:
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 .Разница в том, что регулярное выражение больше не имеет $
в конце, =
в конце, так как этого достаточно, чтобы прекратить проверять там, и =
символы добавляются в классы отрицательных символов, чтобы предотвратить их сопоставление по всемуэти символы.