javascript正则表达式查找只包含一个点的单词

问题描述 投票:1回答:1

我有程序:

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"]


据说我的问题可能是Learning Regular Expressions的重复,所以让我们永远关闭stackoverflow,因为所有关于软件编程的问题都在他们自己的官方文档中有答案。

将问题标记为官方文件的可能副本时请小心。否则我们应该关闭所有关于正则表达式的问题,因为Learning Regular Expressions足以解决有关正则表达式的所有问题。对?

javascript regex
1个回答
3
投票

你可以使用/^[^.]*\.[^.]*$/正则表达式:

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+字符
  • $ - 字符串的结尾。

regex demo

替代方案,单一正则表达式,解决方案

您可以使用单个正则表达式收集您的匹配项

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

regex demo

细节

  • (?:^|\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。区别在于正则表达式最后不再有$=在最后,因为它足以停止在那里检查,并且=字符被添加到否定字符类以防止它们匹配这些符号。

© www.soinside.com 2019 - 2024. All rights reserved.