我知道这可能非常简单,但似乎无法找到我正在尝试做的一个例子。
从字符串的开头匹配,我想匹配建筑物编号。
即
60将匹配60A和60但不匹配6000
同样
1将匹配1和1ABC但不匹配11
/^1[^\0-9]*
就像我需要的那样,任意次数匹配1和任何非数值。 (授予它来自expresso - (.net)但它在那里不起作用。
任何人都能指出我正确的方向吗?
感谢,
萨姆
答案 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