我有程序:
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+字符$
- 字符串的结尾。替代方案,单一正则表达式,解决方案
您可以使用单个正则表达式收集您的匹配项
/(?:^|\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。区别在于正则表达式最后不再有$
,=
在最后,因为它足以停止在那里检查,并且=
字符被添加到否定字符类以防止它们匹配这些符号。