如何在javascript中使用正则表达式仅获取不以2开头的数字?

时间:2017-12-14 17:20:40

标签: javascript regex regex-negation

我有一个数字列表,如下所示:

  • 200
  • 302
  • 301
  • 201
  • 205
  • 500

使用正则表达式,我如何只获取不以2开头的数字?

所以输出应该如下:

  • 302
  • 301
  • 500

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标(如下所示)。

注意:我知道模式只匹配第一个字符。请阅读整个答案,了解原因(以及如果需要,如何匹配完整的数字)。

代码

用法部分使用每种方法的第一个正则表达式(因为它是对第一个字符的简单验证)。每种方法的第二个正则表达式允许您捕获整个数字,如果这是意图。

方法1 - 正则表达式:字符集

此方法需要39步,长度为9(+3)个字符。

See regex in use here

\b[013-9]
\b[013-9]\d*

方法2 - 正则表达式:否定前瞻

此方法需要63步,长度为9(+1)个字符。

See regex in use here

\b(?!2)\d
\b(?!2)\d*

方法3 - 正则表达式:否定字符集

此方法需要39个步骤,长度为8(+3)个字符。

See regex in use here

\b[^\D2]
\b[^\D2]\d*

方法4 - JavaScript:startsWith

startsWith("2");

方法5 - JavaScript:数组元素

假设n是转换为字符串的数字。

n[0] !== "2"

方法6 - JavaScript:数学

假设n是一个正数(我们认为它是肯定的)。

while(n >= 10) {
    n = Math.floor(n/10);
}
if(n !== 2)

用法



var nums = [200,302,301,201,205,500];

console.log("Method 1");
var r = /\b[013-9]/g
nums.forEach(function(s){
  s = s.toString();
  if(s.match(r)) {
    console.log(s);
  }
});

console.log("\nMethod 2");
var r = /\b(?!2)\d/g
nums.forEach(function(s){
  s = s.toString();
  if(s.match(r)) {
    console.log(s);
  }
});

console.log("\nMethod 3");
var r = /\b[^\D2]/g
nums.forEach(function(s){
  s = s.toString();
  if(s.match(r)) {
    console.log(s);
  }
});

console.log("\nMethod 4");
nums.forEach(function(s){
  s = s.toString();
  if(!s.startsWith("2")) {
    console.log(s);
  }
});

console.log("\nMethod 5");
nums.forEach(function(s){
  s = s.toString();
  if(s[0] !== "2") {
    console.log(s);
  }
});

console.log("\nMethod 6");
nums.forEach(function(s){
  var n = Math.abs(s);
  while(n >= 10) {
    n = Math.floor(n/10);
  }
  if(n !== 2) {
    console.log(s);
  }
});




结果

输入

200
302
301
201
205
500

输出

302
301
500

说明

注意:我的答案中的所有正则表达式都使用\b(字边界)来确保数字的开头。您可以根据需要更换它。例如,如果输入是多行的,您可能希望将^(行开头断言)与多行标志(通常为m)一起使用。以下解释不包括\b令牌的解释(因为我已经解释过了)。

方法1 - 正则表达式:字符集

  • [013-9]匹配集合中的字符(0,1或3-9范围内的数字)

方法2 - 正则表达式:否定前瞻

  • (?!2)\d否定前瞻确保后续内容不是2。

方法3 - 正则表达式:否定字符集

  • [^\D2]匹配不在集合中的任何字符(任何非数字或2)。请注意,[^\D2]实际上是双重否定,表示匹配任何数字,不包括2

方法4 - JavaScript:startsWith

来自Mozilla's documentation

  

语法

str.startsWith(searchString[, position])
     

参数

     

searchString

     
      
  • 在此字符串开头搜索的字符。
  •   
     

position 可选

     
      
  • 此字符串中开始搜索searchString的位置;默认为0。
  •   
     

返回值

     

true如果在开头找到给定的字符   串;否则,false

     

描述

     

此方法可让您确定字符串是否以字符串开头   另一个字串。此方法区分大小写。

方法5 - JavaScript:数组元素

此方法只是取一个数字中的第一个数字,并根据字符串2对其进行测试,看它们是否匹配。返回任何返回false的内容(不以2开头)。

方法6 - JavaScript:数学

此方法获取数字Math.abs()的绝对值,然后连续将数字除以10,同时删除小数位(Math.floor(n/10)),直到数字小于10.然后检查结果数字2以确保它与if(n !== 2)不匹配。