检查文本是否以字符开头,后跟数字
问题描述:
我想根据搜索文本的开头将某个变量设置为某些值。检查文本是否以字符开头,后跟数字
我目前有:
var action;
switch (searchText.substr(0, 3).toUpperCase()) {
case 'ABC':
action = 'foo';
break;
case 'CDE':
action = 'bar';
break;
}
这工作。但我想扩展它,以便不仅仅检查文本是否以ABC
开头,而应该是ABC
+至少两个数字,如ABC12
。我将如何在我的开关盒内制作一个正则表达式来验证它?
答
您可以嵌入在switch语句中的正则表达式会在情况下返回不null
:
switch(true) {
case /^ABC\d\d/g.test(searchText):
action = 'foo';
break;
case /^XYZ$/.test(searchText):
action = 'bar';
break;
}
虽然我个人更喜欢桌子驱动的方法:
function firstMatch(text, mapping) {
for(var i = 0; i < mapping.length; i++)
if(mapping[i][0].test(text))
return mapping[i][1];
}
actions = [
[/^ABC\d\d/g, 'foo'],
[/^XYZ\d\d/g, 'bar'],
]
action = firstMatch(searchText, actions)
答
谢谢,但是这会被硬编码为两个数字,对吧? – Johan 2013-04-30 08:10:58
@Johan:没有。 '/^ABC\d\d/.test(x)'对于“ABC”返回true,并且对至少两个数字(它只是忽略其余部分)返回true。 – georg 2013-04-30 08:12:22
不需要'g'标志。 – MikeM 2013-04-30 08:12:42