拆分正则表达式除了数字

时间:2014-10-29 19:42:31

标签: regex split

我正在努力做一些每月分期付款,有一些可能性,例如:

  • 3x // result == 3
  • 10x // result == 10
  • 30 // result == 1
  • 30./60 // result == 2
  • 30 @ 60 @ 90 // result == 3
  • 30 60 90 120 // result == 4
  • 30-60-90-120-150 // result == 5
  • 30x60x90x120x150x180 // result == 6

等等...我正在尝试任何字符多个空格或多个字符(相互之间是否相等)。到目前为止,我已达到以下代码...但我可以为数字添加例外,结果并不总是正确的。

var pattern = /(\#?[a-zA-Z(!0-9) \/]+)/g;
var a = '30/60/90';
var b = a.split(pattern);

$('#yyy').text(b);
$('#xxx').text(b.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="yyy"></label>
<br><br>
<label id="xxx"></label>

我在正则表达式中是可怕的,真的是“noob”,所以如果可以在答案/评论中解释为什么你在做特定的正则表达式,我会很高兴(所以我可以学习而不是复制/粘贴没有太多线索)

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但我会按照我的理解回答:

要分割除数字以外的任何内容,解决方案将是:

&#13;
&#13;
var pattern = /\D+/g;
var a = '30/60/90';
var b = a.split(pattern);

$('#yyy').text(JSON.stringify(b));
$('#xxx').text(b.length);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="yyy"></label>
<br><br>
<label id="xxx"></label>
&#13;
&#13;
&#13;

正则表达式非常简单:\d表示数字,因此\D表示不是数字,因此\D+表示一系列不是数字的字符

如果你尝试匹配而不是拆分可能会更容易:

&#13;
&#13;
var pattern = /\d+/g;
var a = '30/60/90';
var b = [];
var m;

while (m = pattern.exec(a))
    b.push(m[0]);

$('#yyy').text(JSON.stringify(b));
$('#xxx').text(b.length);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="yyy"></label>
<br><br>
<label id="xxx"></label>
&#13;
&#13;
&#13;

在这种情况下,\d+表示一系列数字

供参考,在JS中:

  • \d[0-9]
  • 的简写
  • \D[^0-9]
  • 的简写