Javascript正则表达式匹配更简单的方法

时间:2014-02-23 14:46:30

标签: javascript

我有以下代码来匹配格式为 1ab11ab111

的字符串

其中 1 =任意数字 0到9

a b =任何字符 a到z或A到Z

var str = "1ab11ab111";
var patt1 = /[0-9]+[a-z]+[a-z]+[0-9]+[0-9]+[a-z]+[a-z]+[0-9]+[0-9]+[0-9]/i;

那么相同的字符串匹配是否有更简单的方法/代码?

4 个答案:

答案 0 :(得分:3)

[0-9]可以简化为\d。如果这些字符类中的每一个都只与一个字符(而不是现在的一个或多个字符)匹配,那么您可以将类似的字符类与单个{…}量词一起使用,如下所示:

var patt1 = /\d[a-z]{2}\d{2}[a-z]{2}\d{3}/;

这将匹配并且字符串由一个数字组成,后跟两个小写拉丁字母,后跟两个数字,后跟两个小写拉丁字母,后跟三个数字。

但是通过将某些元素组合在一起可以进一步简化它,例如:

var patt1 = /(\d[a-z]\d){2}\d{2}/;

这将匹配所有单个数字,后跟两个小写拉丁字母,后跟一个数字,捕获到组1中,必须出现两次,然后是两位数。

另请注意,这两个字符都匹配字符串中任何匹配此模式的字符序列 - 例如。 'foo1ab11ab111bar'将是有效的匹配。如果这是一个问题,请使用start(^)和end($)锚来防止在匹配的子字符串之前或之后出现任何字符,如下所示:

var patt1 = /^(\d[a-z]\d){2}\d{2}$/;

答案 1 :(得分:2)

您提供的此正则表达式将匹配包含小写字母和数字的任何字符串。

我认为你真的想要:

/^\d[a-z]{2}\d{2}[a-z]{2}\d{3}$/i

以下是我测试的方式:

/^\d[a-z]{2}\d{2}[a-z]{2}\d{3}$/i.test('1ab11ab111'); // true
/^\d[a-z]{2}\d{2}[a-z]{2}\d{3}$/i.test('1ab11Ab111'); // true
/^\d[a-z]{2}\d{2}[a-z]{2}\d{3}$/i.test('1ab11ab11'); // false

答案 2 :(得分:1)

/[0-9][a-z]+[0-9]+[a-z]+[0-9]+/

应该够了

对于完全匹配,你应该这样做,其中a和b可以是你要求的大写字母:

/[0-9][a-zA-Z]{2}[0-9]{2}[a-zA-Z]{2}[0-9]{3}/

DEMO

答案 3 :(得分:1)

您可以使用/[0-9][a-z]{2}[0-9]{2}[a-z]{2}[0-9]{3}/i

您可以使用\d代替[0-9]。因此,模式将使用\d

/\d[a-z]{2}\d{2}[a-z]{2}\d{3}/i

您可以在http://regex101.com/r/fS9cB6

进行测试
相关问题