使用正则表达式

时间:2019-06-14 19:15:30

标签: javascript regex match

需要使用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]

3 个答案:

答案 0 :(得分:1)

尝试使用此:

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

这将符合您想要的样式!

这是Regex的reference

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]

答案 1 :(得分:0)

使用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) ));

答案 2 :(得分:-1)

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

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