jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2024-05-06 14:23:08
供稿:网友
作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail.com
声明:本文为原创文章,如需转载,请注明来源并保留原文链接。
后文预告:jQuery中的正则表达式分析
2.4 常用正则表达式
在网上找到一篇广为流传的文章《常用正则表达式》,逐一分析,不足地方进行补充和纠正。
代码如下:
常用的数字正则(严格匹配)
正则 含义
^[1-9]/d*$ 匹配正整数
^-[1-9]/d*$ 匹配负整数
^-?[1-9]/d*$ 匹配整数
^[1-9]/d*|0$ 匹配非负整数(正整数 + 0)
^-[1-9]/d*|0$ 匹配非正整数(负整数 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$ 匹配正浮点数
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ 匹配负浮点数
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ 匹配浮点数
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ 匹配非负浮点数(正浮点数 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ 匹配非正浮点数(负浮点数 + 0)
代码如下:
常用字符串正则
正则 含义 补充
^[A-Za-z]+$ 匹配由26个英文字母组成的字符串 或 /^[a-z]+$/i
^[A-Z]+$ 匹配由26个英文字母的大写组成的字符串
^[a-z]+$ 匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ 匹配由数字和26个英文字母组成的字符串 注意/w包含下划线_
^/w+$ 匹配由数字、26个英文字母或者下划线组成的字符串
常用数字正则和常用字符串正则,是最基本的正则应用,读者可以作为入门的练习,试试能不能快速的读懂其中的含义。
代码如下:
匹配中文字符
普遍使用的正则是[/u4e00-/u9fa5],但这个范围并不完整。例如:
/[/u4e00-/u9fa5]/.test( '⻏' ) // 测试部首⻏,返回false
根据Unicode 5.0版编码,要准确的判断一个中文字符要包括:
范围 含义 范围 含义
2E80-2EFF CJK 部首补充 2F00-2FDF 康熙字典部首
3000-303F CJK 符号和标点 31C0-31EF CJK 笔画
3200-32FF 封闭式 CJK 文字和月份 3300-33FF CJK 兼容
3400-4DBF CJK 统一表意符号扩展 A 4DC0-4DFF 易经六十四卦符号
4E00-9FBF CJK 统一表意符号 F900-FAFF CJK 兼容象形文字
FE30-FE4F CJK 兼容形式 FF00-FFEF 全角ASCII、全角标点
因此,正确的匹配中文字符正则表达式为:
var rcjk = /[/u2E80-/u2EFF/u2F00-/u2FDF/u3000-/u303F/u31C0-/u31EF/u3200-/u32FF/u3300-/u33FF/u3400-/u4DBF/u4DC0-/u4DFF/u4E00-/u9FBF/uF900-/uFAFF/uFE30-/uFE4F/uFF00-/uFFEF]+/g;
如果不希望匹配标点、符号,在正则中去掉对应的范围即可:
3000-303F CJK 符号和标点 FF00-FFEF 全角ASCII、全角标点
代码如下:
匹配双字节字符(包括汉字在内)
[^/x00-/xff],可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1),代码示例如下:
console.info( "abc".replace( /[^/x00-/xff]/g,"aa" ).length ) // 3
console.info( "汉字".replace( /[^/x00-/xff]/g,"aa" ).length ) // 4