我有程序:
$currenttime = new \DateTime();
$currenttimehour = $currenttime->format('H:00');
$nextHour = $currenttime->add(new DateInterval('PT1H'))->format('H:00');
echo $currenttimehour;
echo ' ';
echo $nextHour;
我得到的结果是: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'"]
据说我的问题可能是Learning Regular Expressions的重复,所以请永久关闭stackoverflow,因为有关软件编程的所有问题都在其官方文档中给出了答案。
在将问题标记为正式文件的可能副本时,请小心。否则,我们应该关闭有关正则表达式的所有问题,因为Learning Regular Expressions足以解决有关正则表达式的所有问题。对吧?
答案 0 :(得分: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。不同之处在于,正则表达式的末尾不再有$
,末尾的=
因为足以在此处停止检查,并且=
字符被添加到了否定的字符类中以防止它们在这些符号之间匹配。