如何仅匹配两个点之间的数字,不包括使用正则表达式的点[重复]
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.8
1.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) 这是因为某些浏览器不支持正则表达式中的积极后向功能(?<=regex
)以上是关于如何仅匹配两个点之间的数字,不包括使用正则表达式的点[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java 判断整数,整数范围为0-120 之间 和 30-180 的两个正则表达式如何写?不允许小数,字母等非法内容。