Javascript - 正则表达式 - 使用Not运算符

时间:2012-03-07 00:21:57

标签: javascript regex

我知道这可能非常简单,但似乎无法找到我正在尝试做的一个例子。

从字符串的开头匹配,我想匹配建筑物编号。

60将匹配60A和60但不匹配6000

同样

1将匹配1和1ABC但不匹配11

/^1[^\0-9]*

就像我需要的那样,任意次数匹配1和任何非数值。 (授予它来自expresso - (.net)但它在那里不起作用。

任何人都能指出我正确的方向吗?

感谢,

萨姆

4 个答案:

答案 0 :(得分:4)

您可以使用正则表达式/^1(?!\d)/来匹配建筑物1。

(?!\d)是一个负向前瞻,并说“匹配1,只要它没有跟随另一个数字”。

e.g。

myString.match(/^1(?!\d)/)

答案 1 :(得分:2)

\0表示其他内容

/^1[^0-9]*/

0-9\d

相同
/^1[^\d]*/

答案 2 :(得分:1)

如果我理解你的要求,你可以这样做:

function parseLeadingDigits(str) {
    var matches = str.match(/^\d+/);
    if (matches) {
        return ({num: parseInt(matches[0], 10), valid: true});
    }
    return ({num: 0, valid: false});
}

function compareLeadingDigits(str1, str2) {
    var data1 = parseLeadingDigits(str1);
    var data2 = parseLeadingDigits(str2);
    return(data1.valid && data2.valid && (data1.num == data2.num));
}

或者可以在不转换为这样的实际数字的情况下完成:

function parseLeadingDigits(str) {
    var matches = str.match(/^\d+/);
    if (matches) {
        return(matches[0]);
    }
    return("");
}

function compareLeadingDigits(str1, str2) {
    var result1 = parseLeadingDigits(str1);
    var result2 = parseLeadingDigits(str2);
    return(result1 == result2 && result1 != "");
}

示例:

compareLeadingDigits("60", "6000");    // false
compareLeadingDigits("60", "60A");     // true
compareLeadingDigits("60", "60");      // true
compareLeadingDigits("1", "1");        // true
compareLeadingDigits("1", "1ABC");     // true
compareLeadingDigits("60", "A60");     // false

答案 3 :(得分:1)

如果要将变量放在正则表达式中,可以执行以下操作:

var number = 60;
var re = new RegExp("^"+number+"(?!\\d)");

'60'.match(re);        // => ["60"]
'60A'.match(re);       // => ["60"]
'600   '.match(re);    // => null
'a60A'.match(re);      // => null