天天看点

JavaScript正则表达式简单学习

<code>&lt;!DOCTYPE HTML&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>meta</code> <code>charset</code><code>=</code><code>"UTF-8"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;JS正则表达式学习&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>&gt;</code>

<code>                           </code> 

<code>        </code><code>(function(){</code>

<code>            </code><code>/*</code>

<code>                </code><code>RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。</code>

<code>                                   </code> 

<code>                </code><code>1:直接量语法 /pattern/attributes</code>

<code>                </code><code>2:创建 RegExp 对象的语法:new RegExp(pattern, attributes);</code>

<code>                </code><code>3:参数</code>

<code>                </code><code>(1)参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。</code>

<code>                </code><code>(2)参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",</code>

<code>                </code><code>分别用于指定全局匹配、区分大小写的匹配和多行匹配。</code>

<code>                </code><code>ECMAScript 标准化之前,不支持 m 属性。</code>

<code>                </code><code>如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。</code>

<code>                </code><code>4:返回值</code>

<code>                </code><code>一个新的 RegExp 对象,具有指定的模式和标志。</code>

<code>                </code><code>如果参数 pattern 是正则表达式而不是字符串,</code>

<code>                </code><code>那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。</code>

<code>                </code><code>如果不用 new 运算符,而将 RegExp() 作为函数调用,</code>

<code>                </code><code>那么它的行为与用 new 运算符调用时一样,</code>

<code>                </code><code>只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。</code>

<code>                </code><code>5:抛出</code>

<code>                </code><code>(1)SyntaxError - 如果 pattern 不是合法的正则表达式,</code>

<code>                </code><code>或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。</code>

<code>                </code><code>(2)TypeError - 如果 pattern 是 RegExp 对象,</code>

<code>                </code><code>但没有省略 attributes 参数,抛出该异常。</code>

<code>                </code><code>6.说明:</code>

<code>                </code><code> 由于我们用new RegExp()对象时,有些字符串需要转义,所以一般我们用“直接量语法”</code>

<code>                </code><code>eg:</code>

<code>                </code><code>var reg = /\d+/;</code>

<code>                </code><code>var reg = new RegExp("\\d+");  //需要转义比较麻烦</code>

<code>            </code><code>*/</code>

<code>                               </code> 

<code>        </code><code>/*</code>

<code>            </code><code>1.test()方法:test() 方法用于检测一个字符串是否匹配某个模式.</code>

<code>            </code><code>语法:RegExpObject.test(string)</code>

<code>            </code><code>如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。</code>

<code>            </code><code>eg:</code>

<code>        </code><code>var reg = /\d+/; //表示必须含有数字</code>

<code>        </code><code>var value1 = "123";</code>

<code>        </code><code>var value2 = "abc";</code>

<code>        </code><code>var v3 = "a2c";</code>

<code>        </code><code>alert(reg.test(value1)); //true</code>

<code>        </code><code>alert(reg.test(value2)); //false</code>

<code>        </code><code>alert(reg.test(v3)); //true</code>

<code>        </code><code>*/</code>

<code>            </code><code>2.^n : ^n 量词匹配任何开头为 n 的字符串。</code>

<code>        </code><code>var reg = /^\d+/; //表示任何开头必须为数字</code>

<code>        </code><code>var v1 = "123abc";</code>

<code>        </code><code>var v2 = "abc123";</code>

<code>        </code><code>alert(reg.test(v1)); //true</code>

<code>        </code><code>alert(reg.test(v2)); //false</code>

<code>            </code><code>3.n$: n$ 量词匹配任何结尾为 n 的字符串。</code>

<code>            </code><code>eg:</code>

<code>        </code><code>var reg = /\d+$/; //表示结尾必须为数字</code>

<code>        </code><code>var v1 = "abc123";</code>

<code>        </code><code>var v2 = "123abc";</code>

<code>            </code><code>4.综合2,3</code>

<code>        </code><code>var reg = /^\d+$/; //表示必须都是数字</code>

<code>        </code><code>var v3 = "123";</code>

<code>        </code><code>alert(reg.test(v1));    //false</code>

<code>        </code><code>alert(reg.test(v2));    //false</code>

<code>        </code><code>alert(reg.test(v3));    //true</code>

<code>        </code><code>//综上所述:JS中的正则,一般我们以这种格式:var reg = /^xxxxxx$/;</code>

<code>        </code><code>//^代表开始,$代表结束</code>

<code>            </code><code>5.String对象的match()方法:</code>

<code>            </code><code>(1)match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。</code>

<code>            </code><code>该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。</code>

<code>            </code><code>(2)语法 :</code>

<code>            </code><code>stringObject.match(searchvalue)</code>

<code>            </code><code>stringObject.match(regexp)</code>

<code>            </code><code>(3)参数          描述</code>

<code>            </code><code>searchvalue       必需。规定要检索的字符串值。</code>

<code>            </code><code>regexp            必需。规定要匹配的模式的 RegExp 对象。</code>

<code>                              </code><code>如果该参数不是 RegExp 对象,</code>

<code>                              </code><code>则需要首先把它传递给 RegExp 构造函数,</code>

<code>                              </code><code>将其转换为 RegExp 对象。</code>

<code>                                             </code> 

<code>            </code><code>(4)返回值</code>

<code>            </code><code>存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。</code>

<code>            </code><code>(5)说明:</code>

<code>            </code><code>如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。</code>

<code>            </code><code>如果没有找到任何匹配的文本, match() 将返回 null</code>

<code>        </code><code>var str = "1 plus 2 equals 3";</code>

<code>        </code><code>var str1 = "a plus b equals ab";</code>

<code>        </code><code>var result = str.match(/\d+/g); //使用全局匹配的正则表达式来检索字符串中的所有数字</code>

<code>        </code><code>var result1 = str.match(/\d+/); //检测到第一个数字就停止检测了,并返回第一个数字</code>

<code>        </code><code>var result2 = str1.match(/\d+/); // str1中没有数字,将返回null</code>

<code>                       </code> 

<code>        </code><code>alert(result); //1,2,3  数组</code>

<code>        </code><code>alert(result1); // 1</code>

<code>        </code><code>alert(result2); // null</code>

<code>        </code><code>var str3 = "Hello , World, World is not mine";</code>

<code>        </code><code>var r1 = str3.match("world");   //字符串中没有world返回null</code>

<code>        </code><code>var r2 = str3.match("World");   //非全局匹配</code>

<code>        </code><code>var r3 = str3.match(/World/g);  //全局匹配</code>

<code>        </code><code>var r4 = str3.match(/World/);</code>

<code>        </code><code>var r5 = str3.match(/world/gi); //全局匹配,并且不区分大小写</code>

<code>        </code><code>alert(r1); //null</code>

<code>        </code><code>alert(r2); //World</code>

<code>        </code><code>alert(r3); //World,World 数组</code>

<code>        </code><code>alert(r4); //World ,只匹配到第一个</code>

<code>        </code><code>alert(r5); //World,World 数组 ,忽略大小写</code>

<code>        </code><code>var str4 = "@Jerry @Tom @Alex Hello" ;</code>

<code>        </code><code>var re1 = str4.match(/@\w+\s/gim); //匹配以@开头,以空格结尾,中间为字符的</code>

<code>        </code><code>alert(re1); //@Jerry ,@Tom ,@Alex  数组</code>

<code>            </code><code>6.方括号</code>

<code>            </code><code>(1):[abc]   查找方括号之间的任何字符。</code>

<code>        </code><code>var str = "I love a ,but I like b, c is my wife";</code>

<code>        </code><code>var r1 = str.match(/[abc]/g); //在字符串中对字符范围 abc 进行全局搜索</code>

<code>        </code><code>alert(r1); // a,b,b,c 数组</code>

<code>        </code><code>var r2 = str.match(/[a-h]/g); //在字符串中对字符范围 [a-h] 进行全局搜索</code>

<code>        </code><code>alert(r2); // e,a,b,e,b,c,f,e</code>

<code>            </code><code>(2):[^abc]  查找任何不在方括号之间的字符。</code>

<code>        </code><code>var str = "Is this all there is?";</code>

<code>        </code><code>var r1 = str.match(/[^a-h]/g); //对不在字符范围 [a-h] 内的字符进行全局搜索</code>

<code>        </code><code>alert(r1); //I,s, ,t,i,s, ,l,l, ,t,r, ,i,s,?</code>

<code>            </code><code>(3):</code>

<code>            </code><code>[0-9]   查找任何从 0 至 9 的数字。</code>

<code>            </code><code>[a-z]   查找任何从小写 a 到小写 z 的字符。</code>

<code>            </code><code>[A-Z]   查找任何从大写 A 到大写 Z 的字符。</code>

<code>            </code><code>[A-z]   查找任何从大写 A 到小写 z 的字符。</code>

<code>            </code><code>[adgk]  查找给定集合内的任何字符。</code>

<code>            </code><code>[^adgk] 查找给定集合外的任何字符。</code>

<code>            </code><code>(red|blue|green)    查找任何指定的选项。</code>

<code>        </code><code>var str = "Hello,Tom";</code>

<code>        </code><code>var str1 = "Hello,Jerry";</code>

<code>        </code><code>var str2 = "Hello,Jakc";</code>

<code>        </code><code>var reg = /^Hello,(Tom|Alex|Jerry)$/;   //含有Tom 或者 Alex, 或者 Jerry 结尾</code>

<code>        </code><code>alert(reg.test(str)); //true</code>

<code>        </code><code>alert(reg.test(str1)); //true</code>

<code>        </code><code>alert(reg.test(str2)); //false</code>

<code>            </code><code>7.:元字符</code>

<code>            </code><code>(1):.   查找单个字符,除了换行和行结束符。</code>

<code>        </code><code>var str = "That's hot!";</code>

<code>        </code><code>alert(str.match(/h.t/g)); // hat,hot 数组</code>

<code>            </code><code>(2):\w 元字符用于查找单词字符。表示必须是字母字符</code>

<code>            </code><code>单词字符包括:a-z、A-Z、0-9,以及下划线。</code>

<code>        </code><code>var str = "Hello World ,1999 !!";</code>

<code>        </code><code>alert(str.match(/\w/g)); //H,e,l,l,o,W,o,r,l,d,1,9,9,9 数组</code>

<code>            </code><code>(3):\W 元字符用于查找非单词字符。</code>

<code>                </code><code>单词字符包括:a-z、A-Z、0-9,以及下划线。</code>

<code>        </code><code>alert(str.match(/\W/g)); // , ,,, ,!,! 数组</code>

<code>            </code><code>(4):\d  查找数字。</code>

<code>        </code><code>alert(str.match(/\d/g)); // 1,9,9,9 数组</code>

<code>            </code><code>(5):\D 查找非数字字符。</code>

<code>        </code><code>alert(str.match(/\D/g)); //H,e,l,l,o, ,W,o,r,l,d, ,,, ,!,! 数组</code>

<code>            </code><code>(6):\s  查找空白字符。</code>

<code>        </code><code>alert(str.match(/\s/g)); // , , 数组</code>

<code>            </code><code>(7):\S  查找非空白字符。</code>

<code>        </code><code>alert(str.match(/\S/g)); //H,e,l,l,o,W,o,r,l,d,,,1,9,9,9,!,! 数组</code>

<code>            </code><code>(8):\b 元字符匹配单词边界。</code>

<code>            </code><code>在单词边界匹配的位置,单词字符后面或前面不与另一个单词字符直接相邻。</code>

<code>            </code><code>请注意,匹配的单词边界并不包含在匹配中。</code>

<code>            </code><code>换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。)</code>

<code>            </code><code>如果未找到匹配,则返回 null。</code>

<code>            </code><code>提示:\b 元字符通常用于查找位于单词的开头或结尾的匹配。</code>

<code>            </code><code>例子:</code>

<code>            </code><code>/\bm/ 匹配 "moon" 中的 'm';</code>

<code>            </code><code>/oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;</code>

<code>            </code><code>/oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;</code>

<code>            </code><code>/\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。</code>

<code>            </code><code>var str = "Hello World ,1999 !!";</code>

<code>            </code><code>var str1 = "HelloWorld ,1999 !!";</code>

<code>            </code><code>alert(str.match(/\bWo/g)); //Wo</code>

<code>            </code><code>alert(str1.match(/\bWo/g)); //null</code>

<code>            </code><code>8. 量词</code>

<code>            </code><code>n+  匹配任何包含至少一个 n 的字符串。</code>

<code>            </code><code>n*  匹配任何包含零个或多个 n 的字符串。</code>

<code>            </code><code>n?  匹配任何包含零个或一个 n 的字符串。</code>

<code>            </code><code>n{X}    匹配包含 X 个 n 的序列的字符串。</code>

<code>            </code><code>n{X,Y}  匹配包含 X 或 Y 个 n 的序列的字符串。</code>

<code>            </code><code>n{X,}   匹配包含至少 X 个 n 的序列的字符串。</code>

<code>            </code><code>n$  匹配任何结尾为 n 的字符串。</code>

<code>            </code><code>^n  匹配任何开头为 n 的字符串。</code>

<code>            </code><code>?=n 匹配任何其后紧接指定字符串 n 的字符串。</code>

<code>            </code><code>?!n 匹配任何其后没有紧接指定字符串 n 的字符串。</code>

<code>            </code><code>(1):n+  匹配任何包含至少一个 n 的字符串。</code>

<code>                </code><code>n*  匹配任何包含零个或多个 n 的字符串。</code>

<code>                </code><code>n?  匹配任何包含零个或一个 n 的字符串。</code>

<code>        </code><code>var str = "Hello Weiyuan2013! I love you ";</code>

<code>        </code><code>var reg = /\d+/g; //至少包含一个数字</code>

<code>        </code><code>var reg1 = /l+/g; //结尾至少包含字母l</code>

<code>        </code><code>var reg2 = /lo?/g; //表示l含有0个或1个o</code>

<code>        </code><code>alert(reg1.test(str)); //true</code>

<code>        </code><code>alert(reg2.test(str)); //true</code>

<code>            </code><code>(4):</code>

<code>            </code><code>①n{X}   匹配包含 X 个 n 的序列的字符串。</code>

<code>            </code><code>用法:n{X,} 量词匹配包含 X 个 n 的序列的字符串。</code>

<code>            </code><code>②n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。</code>

<code>            </code><code>用法:</code>

<code>            </code><code>n{X,Y} 量词匹配包含 X 或 Y 个 n 的序列的字符串。</code>

<code>            </code><code>X 和 Y 必须是数字。并且X &lt; Y</code>

<code>            </code><code>③n{X,}  匹配包含至少 X 个 n 的序列的字符串。</code>

<code>            </code><code>n{X,} 量词匹配包含至少 X 个 n 的序列的字符串。</code>

<code>            </code><code>X 必须是数字。</code>

<code>        </code><code>var str = "13523877794";</code>

<code>        </code><code>var reg = /7{3}/g; //匹配含有3个7</code>

<code>        </code><code>var reg1 = /7{4}/g; //匹配含有4个7</code>

<code>        </code><code>var reg2 = /7{3,4}/g; // 匹配含有3个7 或者4 个7</code>

<code>        </code><code>var reg3 = /7{2,}/g; //至少含有2个7 ,可以含有3个7或者4个。。。。。</code>

<code>        </code><code>alert(reg1.test(str)); //false</code>

<code>        </code><code>alert(reg2.test(str)); // true</code>

<code>        </code><code>alert(reg3.test(str)); //true</code>

<code>            </code><code>(5)</code>

<code>            </code><code>①?=n    匹配任何其后紧接指定字符串 n 的字符串。</code>

<code>            </code><code>说明:?=n 量词匹配任何其后紧接指定字符串 n 的字符串</code>

<code>            </code><code>②?!n    匹配任何其后没有紧接指定字符串 n 的字符串。</code>

<code>        </code><code>var str="Is this all there is";</code>

<code>        </code><code>alert(str.match(/is(?= all)/g)); //对其后紧跟 "all" 的 "is" 进行全局搜索:</code>

<code>        </code><code>alert(str.match(/is(?! all)/gi)); //对其后没有紧跟 "all" 的 "is" 进行全局搜索:</code>

<code>        </code><code>//先这样多吧 ---下面看些具体的例子</code>

<code>            </code><code>1.注册用户名验证:要求:字母数字的组合</code>

<code>        </code><code>var paramReg = /^[0-9a-zA-Z]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)[0-9a-zA-Z]*$/;</code>

<code>        </code><code>var username = "12hanchao2013";</code>

<code>        </code><code>alert(paramReg.test(username));</code>

<code>            </code><code>2.对Email的验证:</code>

<code>        </code><code>var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;</code>

<code>        </code><code>var email = "[email protected]";</code>

<code>        </code><code>alert(emailReg.test(email));</code>

<code>            </code><code>3.对电话号码的验证</code>

<code>        </code><code>//var regPhone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;</code>

<code>        </code><code>var regPhone = /^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;</code>

<code>        </code><code>var phone = "4008-007-007";//"0427-7531992"; //"021-60825088";//"76423865";</code>

<code>        </code><code>var result = regPhone.test(phone);</code>

<code>        </code><code>alert(result);</code>

<code>            </code><code>4.验证手机号码:</code>

<code>        </code><code>var regMobile = /^1[3|4|5|6|7|8|9][0-9]{1}[0-9]{8}$/;</code>

<code>        </code><code>var mobile = "13877794164";</code>

<code>        </code><code>var result = regMobile.test(mobile);</code>

<code>            </code><code>5.验证扣扣号:</code>

<code>        </code><code>var regQQ =/^[1-9]\d{4,8}$/;</code>

<code>        </code><code>var qq = "294851313";</code>

<code>        </code><code>var result = regQQ.test(qq);</code>

<code>            </code><code>6.验证MSN:</code>

<code>        </code><code>var regMsn =  /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;</code>

<code>        </code><code>var msn = "[email protected]";</code>

<code>        </code><code>var result = regMsn.test(msn);</code>

<code>            </code><code>7.验证网址:</code>

<code>        </code><code>//var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&amp;=]*)?$/;</code>

<code>        </code><code>var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&amp;=]*)?$/;</code>

<code>        </code><code>var url = "http://game.baidu.com";</code>

<code>        </code><code>var result = regNet.test(url);</code>

<code>            </code><code>8.验证IP:</code>

<code>        </code><code>var checkIp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;</code>

<code>        </code><code>var ip = "192.168.25.103";</code>

<code>        </code><code>var result = checkIp.test(ip);</code>

<code>                          </code> 

<code>        </code><code>})();</code>

<code>    </code><code>&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

//replace方法的使用

// var reg = /\s\*/g;

// var str = "This *is *a *test *string";

// var resultString = str.replace(reg,"--");//用‘--’ 代替str字符串中的‘ *’

// document.writeln(resultString); //This--is--a--test--string

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1251007,如需转载请自行联系原作者

继续阅读