如何仅匹配两个点之间的数字,不包括使用正则表达式的点[重复]

Posted

技术标签:

【中文标题】如何仅匹配两个点之间的数字,不包括使用正则表达式的点[重复]【英文标题】:How to match only the digits that are between two dots excluding the dots using regex [duplicate] 【发布时间】:2019-10-26 19:06:27 【问题描述】:

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

1.6.81.9.7(中间也是两位数)

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

我尝试过这样的事情:

\.\d+(?=\.)

它是针对中间的数字,也是第一个点。

【问题讨论】:

然后试试(?<=\.)\d+(?=\.)。或者使用捕获组,\.(\d+)\. Wiktor 的第二个建议比第一个更具可读性,应该可以正常工作。一个更简单的解决方案可能是使用 split(".") 第一种方法对我不起作用,我已经尝试过第二种方法,但它也选择了点而不仅仅是数字 好吧,当问题没有javascript 标签时,我发表了我的评论。当然,第一个正则表达式在大多数当前的 JS 环境中都不起作用。一旦您访问第 1 组值,第二个就会完全满足您的需要。而且,由于您在尝试过之前只需要知道如何进入群组,这是一个长期解决的问题。 【参考方案1】:

这样的?

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

【讨论】:

嗯,这是针对所有数字,而不仅仅是点之间的数字。这就是我尝试 \.\d+\ 的原因。但它也返回了点,而不仅仅是数字 @pitygacio 添加了有关如何提取组的示例。【参考方案2】:

我认为这里不需要使用正则表达式。你可以使用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))

【讨论】:

运行第二个sn-p时报错:“Unexpected quantifier (l14, c30) 那么可能是浏览器问题(此处为 MS Edge) 这是因为某些浏览器不支持正则表达式中的积极后向功能(?&lt;=regex

以上是关于如何仅匹配两个点之间的数字,不包括使用正则表达式的点[重复]的主要内容,如果未能解决你的问题,请参考以下文章

两个字符串之间的正则表达式匹配,包括那些字符串

Java 判断整数,整数范围为0-120 之间 和 30-180 的两个正则表达式如何写?不允许小数,字母等非法内容。

如何编写正则表达式以仅匹配数字、字母和破折号?

使用正则表达式仅提取两个特定标记之间的数字

需要正则表达式匹配最多8位的int,包括,前导或尾随0但不是单个数字“0”[关闭]

如何使用正则表达式匹配或替换仅包含数值的密码