问题描述
1、var reg=/([Jj]ava)(Script)?/;var b="JavaScript is not Java";alert(b.match(reg)); 结果为:JavaScript Script Java 2、var reg=/([Jj]ava)(Script)?/g;var b="JavaScript is not Java";alert(b.match(reg)); 结果为:JavaScript Java 为什么加了全局标志 Script却没了 求解释????
解决方案
["JavaScript", "Java", "Script"] 这个数组有三个元素。0元素正好是整个匹配,1元素和2元素是包含了匹配中出现的任一个子匹配即"Java", "Script" ([Jj]ava)和(Script))如果设置了全局标志g引用/([Jj]ava)(Script)?/g;正则出来结果是j/JavaScript 或者 j/Java 。j/Java 这个是必须包含的所以结果就是JavaScript Java
解决方案二:
如果没有设置全局标志 (g),数组的0元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素0到n中包含所有匹配。
解决方案三:
["JavaScript", "Java", "Script"] 吧?它们分别是匹配的整串、匹配的子串们(用括号包起来的部分)第二个加了g,可能有多个结果,只返回了匹配到的所有整串
时间: 2024-10-11 14:36:27