使用正则表达式返回时间格式字符串的唯一数字



需要使用 String.match 创建一个正则表达式模式,该模式将在 : 符号之前或之后返回唯一数字。它应该只返回数字,而不是 : 符号。PS:我知道还有其他(也许更简单(的方法可以做到这一点,但我想使用正则表达式进行学习

let s;
let regex = /(^d:)(:d$)/g // I tried this, off course it didn't work
s = '12:34'
s.match(regex) // return null
s = '1:34'
s.match(regex) // return [1]
s = '12:4'
s.match(regex) // return [4]
s = '1:4'
s.match(regex) // return [1,4]

尝试使用这个:

let regex = /(((?<=:)d(?!d))|((?<!d)d(?=:)))/g

这将匹配您想要的模式!

这是正则表达式的参考。

let s;
let regex = /(((?<=:)d(?!d))|((?<!d)d(?=:)))/g
s = '12:34'
console.log(s.match(regex)) // return null
s = '1:34'
console.log(s.match(regex)) // return [1]
s = '12:4'
console.log(s.match(regex)) // return [4]
s = '1:4'
console.log(s.match(regex)) // return [1,4]

用 JavaScript 完成的示例。 第二个正则表达式是最简单的,它匹配一个数字,后跟一个冒号,后跟一个数字(如果你的文本中出现不止一个,你可以将其与 g 标志一起使用(。

第一个

正则表达式匹配整个字符串,并且在第一个数字之前可能有一个或多个字符,在第二个数字之后可能有一个或多个字符。 这将仅捕获整个字符串的一个匹配项。

let regex1 = /^.*(d):(d).*$/;
let regex2 = /(d):(d)/;
console.log("Make sure the entire string only contains one instance");
['12:34', '1:34', '12:4', '1:4' ].forEach( (s) => console.log(s.match(regex1) ));
console.log("Match the first instance found");
['12:34', '1:34', '12:4', '1:4' ].forEach( (s) => console.log(s.match(regex2) ));

不确定"唯一"是什么意思。
但是,如果您只想获取数字,则可以使用+*量词。

/^(d+):(d+)$/

最新更新