问题描述
我有程序:
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,因为所有关于软件编程的问题都在他们自己的官方文档中有答案。
将问题标记为官方文件的可能副本时请小心。 否则我们应该关闭有关正则表达式的所有问题,因为足以解决有关正则表达式的所有问题。 对?
1楼
你可以使用/^[^.]*\\.[^.]*$/
正则表达式:
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);
如果在=
之前必须有一个点 ,请使用
/^[^.=]*\.[^.=]*=/
在你的代码中。
请参阅 。
不同的是,正则表达式不再有$
末, =
是在年底,因为它是足以停止检查那里, =
字符添加到否定的字符类,以防止他们在这些符号匹配。