拆分Regex,但不拆分数字



我正在尝试用一些可能性进行每月分期付款,比如:

  • 3x//结果==3
  • 10x//结果==10
  • 30//结果==1
  • 30./60//结果==2
  • 30@60@90//结果==3
  • 30 60 90 120//结果==4
  • 30-60-90-120-150//结果==5
  • 30x60x90x120x150x180//结果==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>

我对正则表达式感到害怕,真的很"讨厌",所以如果能在答案/注释中解释你为什么要做特定的正则表达式,我会很高兴(这样我就可以在没有太多线索的情况下学习而不是复制/粘贴)

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

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

var pattern = /D+/g;
var a = '30/60/90';
var b = a.split(pattern);
$('#yyy').text(JSON.stringify(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>

正则表达式非常简单:d的意思是一个数字,所以D的意思是不是一个数字,所以D+的意思是一系列不是数字的字符

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

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);
<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>

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

供参考,在JS中:

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

最新更新