(续例3……)
例4:多行、全文定位符匹配
- void function reg_04()
- {
- var s = "Live for nothing,\ndie for something"; //多行
- var r1 = /^.*/g, //匹配1次
- r2 = /^.*/mg, //匹配2次
- r3 = /^.*/m, //匹配1次
- r4 = /^.*/; //匹配1次
- for (n = 1; n <= 4; n++)
- {
- t = "alert(s.match(r" + n + ").length);";
- eval(t);
- t = "r" + n;
- for (i = 0; i < s.match(eval(t)).length; i++)
- {
- alert(s.match(eval(t))[i]);
- }
- }
- }
这个例子有些意思,主要区分多行开关m和全文匹配开关g。
字符串s中包含了一个\n,即换行符,这将导致后面的匹配过程需要考虑多行的问题。
r1~r4都要求从行首匹配,都是匹配任意多个任意字符。
r1只带有开关g,故而匹配全部,由于未加多行开关m,故而只识别第一行,即匹配:Live for nothing,。
r2带有开关g和m,m将字符串解析为多行(两行),g要求匹配全部可匹配的内容,所以会匹配两次。
r3只带有开关m,可将字符串解析为多行,但由于没有开关g,故而,只匹配第一次。
r4不带任何开关,字符串只会识别第一行,且没有开关g,故而只匹配一次。
行10:Sring对象的match()方法的返回值其实是一个数组对象,可以通过其length属性获取其中的元素个数,即匹配了多少次。
行13~行16:这个for循环逐一枚举match()返回数组中的内容。
运行结果:可以看到,只有正则表达式r2会匹配两次。
(未完待续……)
转载于:https://blog.51cto.com/mengliao/466829