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

时间:2019-02-14 10:56:20

标签: javascript regex

我有程序:

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

1 个答案:

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