2012-03-07 21 views
1

我知道這可能是相當直接的,但似乎無法找到我想要做的一個示例。Javascript - 正則表達式 - 使用Not運算符

匹配從一個字符串開始,我想匹配建築物號碼。

60將匹配60A和60而不是6000

同樣

1將匹配1和1ABC而不是11

/^1[^\0-9]*

就像是我所需要的,任何次數匹配1和任何非數值。 (當然這是從快報 - (.NET),但它並沒有在那裏工作

任何人可以點我在正確的方向

感謝,

山姆

+0

我覺得你不需要第一個吧'/' – rcdmk 2012-03-07 00:24:14

+0

顯示一些示例字符串匹配 – 2012-03-07 00:26:54

回答

2

\0意味着別的

/^1[^0-9]*/ 

0-9相同\d

/^1[^\d]*/ 
+0

/^ 1 [^ \ d] * $ /爲我做了。謝謝! – sambomartin 2012-03-07 16:19:38

4

你可以?使用正則表達式/^1(?!\d)/匹配建設1.

(?!\d)是一種消極的前瞻,並說「比賽1,只要它不跟另一個號碼」。

例如

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

感謝回覆,但不匹配1A?我發現^ 1 [^ \ d] * $是我尋找的解決方案 – sambomartin 2012-03-07 16:19:25

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 
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 
相關問題