如何仅使用正则表达式匹配两个点之间的数字(不包括点)

时间:2019-06-12 09:52:47

标签: javascript regex

我有一系列这样的数字(版本):

  

1.6.8
  1.9.7(中间还有两位)

我应该如何只定位中间数字,即点和点之间的数字?

我尝试过这样的事情:

\.\d+(?=\.)

,并且定位中间的数字,也定位第一个点。

2 个答案:

答案 0 :(得分:2)

像这样吗?

var myRegexp = /\d+\.(\d+)\.\d+/;

var match = myRegexp.exec('1.33.4');
console.log(match[1]); //33
var match = myRegexp.exec('441.54.12345647');
console.log(match[1]); //54
match = myRegexp.exec('13.2222.33');
console.log(match[1]); //2222

match = myRegexp.exec('version 1.2.3');
console.log(match[1]); //2

function getMiddle(inputversion) {
    var myRegexp = /\d+\.(\d+)\.\d+/;
    var match = myRegexp.exec(inputversion);
    if(match != null) {
        if(match.length > 0) {
            return match[1];
        }
    }
    return null;
}

console.log('should be 34:', getMiddle('my app version: 1.34.55'));
console.log('should be null:', getMiddle('my app needs no versions.it.is.awesome'));

组选择器()与最中间的数字匹配。
+确保可以捕获大于9的数字。

https://regex101.com/r/wFgpRI/3

答案 1 :(得分:1)

我认为这里不需要使用正则表达式。您可以使用split

var versions = '1.6.8 1.9.7'

console.log(versions.split(' ').map(el => el.split('.')[1]))

如果您不想使用该方法,则可以使用regex,正如wiktor指出的那样:

var versions = '1.6.8 1.9.7'
console.log(versions.match(/(?<=\.)\d+(?=\.)/g))