gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:08:36 25 4
gpt4 key购买 nike

我有程序:

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 以来所有关于正则表达式的问题。足以解决有关正则表达式的所有问题。对吧?

最佳答案

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

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 .不同之处在于,正则表达式的末尾不再有 $= 位于末尾,因为它足以停止检查,而 = 字符被添加到否定字符类中以防止它们匹配这些符号。

关于javascript正则表达式查找只包含一个点的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54688769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com