当前位置: 代码迷 >> JavaScript >> javascript正则表达式查找只包含一个点的单词
  详细解决方案

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

热度:77   发布时间:2023-06-13 12:19:47.0

我有程序:

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'", "kt=1", "xy.z.kt.lm='10'"]

但我只需得到: ["abc.def=1", "kt=1"]


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

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

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

 var str = "ac.def=1 and xy.z.kt='10' and kt=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]* - 除了a之外的0+个字符. 和空白
    • \\. - 一个点
    • [^.\\s]* - 除了a之外的0+个字符. 和空白
  • (?!\\S) - 不允许立即在当前位置右侧使用非空格(字符串的空格或结尾可以出现在右侧)

JS演示:

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

如果在=之前必须有一个点 ,请使用

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

在你的代码中。 请参阅 。 不同的是,正则表达式不再有$末, =是在年底,因为它是足以停止检查那里, =字符添加到否定的字符类,以防止他们在这些符号匹配。