除特定数字之外的任何数字的正则表达式

时间:2015-10-08 04:38:14

标签: javascript regex string regex-negation regex-lookarounds

我想创建一个正则表达式,捕获每个整数(正数和负数),只要它不是以下之一:-2,-1,0,1,2或10。

所以这些应该匹配:-11,8,-4,11,15,121,3等

到目前为止,我有这个正则表达式:/-?([^0|1|2|10])+/

它捕获了负号,但是当数字为-2或-1时仍然会这样做,这是我不想要的。此外,它不会捕获11。

我应该如何更改表达式以匹配我想要查找的数字。另外,有没有更好的方法在字符串中找到这些数字?

3 个答案:

答案 0 :(得分:5)

  

我应该如何更改表达式以匹配我想要查找的数字。另外,有没有更好的方法在字符串中找到这些数字?

只需使用简单的正则表达式,即匹配字符串中的所有数字,然后过滤数字

// Define the exclude numbers list:
// (for maintainability in the future, should excluded numbers ever change, 
// this is the only line to update)
var excludedNos = ['-2', '-1', '0', '1', '2', '10'];

var nos = (str.match(/-?\d+/g) || []).filter(function(no) {
    return excludedNos.indexOf(no) === -1;
});

Demo

答案 1 :(得分:1)

-?(?!(?:-?[012]\b)|10\b)\d+\b

只需添加lookahead即可删除您不想要的号码。请参阅演示。

https://regex101.com/r/cJ6zQ3/33

var re = /-?(?!(?:-?[012]\b)|10\b)\d+\b/gm; 
var str = '-2, -1, 0, 1, 2, or 10 -11, 8, -4, 11, 15, 121, 3';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

答案 2 :(得分:1)

您可以使用-?(?!([012]|10)\b)\d+\b否定前瞻断言来解决您的问题

var res = ' -2, -1, 0, 1, 2, or 10 11, 8, -4, 11, 15, 121, 3,'.match(/-?(?!([012]|10)\b)\d+\b/g);
console.log(res);

<强> Regex explanation here

Regular expression visualization