这是我给大四学生上《Web程序设计》课时编写的一个例子,共包含了ECMAScript(即JavaScript)正则表达式的19类内容(作为19个小例子),涵盖了ECMAScript正则表达式的所有内容。是我原来用.NET的C#编写的正则表达式例子中的一部分,另外一部分由于ECMAScript不支持,所以无法转换成ECMAScript,例如非回溯模式、逆序正向和逆序负向预搜索。
自认为编写的由浅入深,言简意赅,深入浅出,呵呵~自诩了。
例1:匹配一个数字ID
- void function reg_01() //匹配一个数字ID
- {
- var s1 = "12-12345",
- s2 = "12-1234567",
- s3 = "1-12345",
- s4 = "12-1234",
- s5 = "1212345678";
- var r = new RegExp("^\\d{2}-\\d{5,8}$", "gim");
- for (i = 1; i <= 5; i++)
- {
- t = "alert(s" + i + ".match(r));";
- eval(t);
- }
- }
行1:定义一个无返回值函数;
行3-7:定义了一些字符串,用于正则表达式匹配测试;
行8:定义一个正则表达式,正则表达式是一个对象,所以使用new进行实例化,其中:
^符号表示从行首开始匹配,即前面不能再有其他字符,\d符号表示匹配数字字符,前面之所以还有一个\符号是因为ECMAScript中的字符\表示转义字符,写成\\即表示\字符本身,后面的{2}符号表示它前面的\d只能匹配两次,-符号表示只能匹配-字符,\d符号同样表示匹配数字字符,后面的{5,8}符号表示该数字字符只能匹配至少5次至多8次,最后的$符号表示匹配到字符串结尾,即后面不能再有其他字符,第二个参数的g表示global,即全文匹配,而不是只匹配第一个(匹配多个后形成一个数组,需通过索引访问),i表示ignore,即忽略大小写,m表示multiline,即多行匹配,例如$符号就可以匹配\r\n等;
行9-13:一个简单的for循环,循环5次,这里使用了一个技巧,以简化代码,本来需要调用五次String对象的match()方法来分别测试对象s1到s5,然后再五次调用alert()方法显示结果,显然这样做太麻烦,故而使用了eval()方法,eval()方法就是用来检查传入的字符串是否是一个合法的ECMAScript语句,如果合法,就执行该语句,这样,通过for循环逐一生成要执行语句的字符串表达,然后调用eval()方法就可以了。
运行结果:显然s1和s2是匹配的,s3的前半部分只有一个数字1,s4的后半部分不足5个数字,s5缺少字符-,因此s3、s4、s5都不匹配。
(未完待续……)