正则表达式比较字符串中的数字

时间:2018-04-25 16:37:46

标签: regex

我有像:

这样的字符串
1.2.3
1.4.0.136
V312
V10
2.2.2
r1elease2.0.0
Vr 1.5.1

我想获得正则表达式,它应该从这些字符串中提取版本(没有字符串)并按排序器顺序排列。可以一次传递任何两个字符串进行比较。

1.2.3 should become 1.2.3 (no change)
1.4.0.136 should become 1.4.0.136 (no change)
V312 should become 312 
V10 should become 10
2.2.2 should become 2.2.2 (no change)
r1elease2.0.0 should become 2.0.0
Vr 1.5.1 should become 1.5.1

我尝试了/[^0-9\.]+/g,但在r1elease2.0.0的情况下它不起作用,因为此字符串变为12.0.0这是不正确的。

3 个答案:

答案 0 :(得分:2)

对于示例数据,您可以使用:

\d+(?:\.\d+)*\b

这将匹配一个或多个数字,然后是零点和一个或多个数字的零次或多次重复模式。它以单词边界\b结尾,因此1中的r1elease2.0.0不匹配。

<强>解释

  • \d+一个或多个数字
  • (?:非捕获组
    • \.\d+匹配一个点和一个或多个数字
  • )*关闭非捕获组并重复零次或多次
  • \b字边界

答案 1 :(得分:0)

尝试:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testbutton">Test button</button>
<span class="spanme" data-number="12" data-type="break">span </span>
<span class="spanme" data-number="4" data-type="group">span </span>
<span class="spanme" data-number="87" data-type="tring">span </span>
<span class="spanme" data-number="7" data-type="samestuff">span </span><br/>

Demo

答案 2 :(得分:0)

你可以这样做:

(\w\s?)*?(\d+(?:\.\d+)*\b)

并用捕获的组2执行替换。\d+(?:\.\d+)*\b的部分由第四次出生解释。部分(\w\s?)*?在替换中被丢弃。输出:

1.2.3
1.4.0.136
312
10
2.2.2
2.0
1.5.1