在学习JavaScript的一些总结和经验,供大家参考和学习,同时也欢迎大家参与讨论。
JavaScript中的正则表达式
模式以及支持标志
var expression = / pattern / flags;var 表达式 = / 模式 / 标志;
正则表达式的匹配模式支持下列3个标志。
| 修饰符 | 描述 |
|---|---|
| g(global) | 全局匹配,应用所有字符串,而非在发现第一个匹配后停止 |
| i(ignoreCase) | 不区分大小写,匹配时忽略模式与字符串的大小写 |
| m(multiline) | 多行匹配,到达一行文本末尾,继续查找下一行 |
两种创建方式
字面量定义和构造函数定义
1 | var expression = /[bc]at/i;//字面量定义 |
RegExp构造函数接收两个参数:RegExp(“要匹配的字符串模式”,”可选的标志字符串”)
注意: 传递给RegExp构造函数的两个参数必须都是字符串
区别:
由于 RegExp 构造函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义。
| 字面量模式 | 构造函数模式 |
|---|---|
RegExp实例方法
test()
接收:一个字符串参数。
返回值:返回一个布尔值。
当模式与改参数匹配的情况下返回true,否则为false。
1 | var example = "000-00-0000"; |
exec()
exec() 接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;在没有匹配项的情况下返回 null 。返回的数组虽然是 Array 的实例,但包含两个额外的属性: index 和 input 。
- index 表示匹配项在字符串中的位置。
- input 表示应用正则表达式的字符串。
match()
match()方法可以以类似数组的形式返回第一个与表达式匹配的字符
例子:1
2
3var reg = /ab/;
var str = "abababababab";
console.log(str.match(reg));
1
2
3var reg = /ab/g;
var str = "abababababab";
console.log(str.match(reg));
方括号
- [……..],查找方括号中的任意字符
比如:
[abc]、[0-9]、[a-z]、[A-Z]、[A-z]、[adgk] [ ^……],查找方括号中以外的任意字符,^表示非,注意这个^是要在[]里面的才表示非
比如:
[^abc]、[^adpk](……|……|……) ,查找圆括号里面中的指定的其中一个,|表示或
比如:
(abc|bcd|def)
元字符
| 字符 | 等价类 | 含义 |
|---|---|---|
| . | [^\r\n] | 除了回车符和换行符之外的所有字符 |
| \d | [0-9] | 数字字符 |
| \D | [^0-9] | 非数字字符 |
| \s | [\t\n\x0B\f\r] | 空白字符 |
| \S | [^\t\n\x0B\f\r] | 非空白字符 |
| \w | [a-zA-Z_0-9] | 单词字符(字母、数字下划线) |
| \W | [^a-zA-Z_0-9] | 非单词字符 |
定位符
| 字符 | 含义 |
|---|---|
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的结尾 |
| \b | 匹配一个单词的边界 |
| \B | 与\b相反,匹配一个非单词边界 |
用例:
量词
| 字符 | 含义 |
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串 |
| n* | 匹配任何包含零个或多个 n 的字符串 |
| n? | 匹配任何包含零个或一个 n 的字符串 |
| n{x} | 匹配包含 x 个 n 的序列的字符串 |
| n{x,y} | 匹配包含 x 至 y 个 n 的序列的字符串 |
| n{x,} | 匹配包含至少 x 个 n 的序列的字符串 |
| ?=n | 匹配任何其后紧接指定字符串 n 的字符串 |
| ?!n | 匹配任何其后没有紧接指定字符串 n 的字符串 |
html特殊字符:
练习题
将the-first-name转换成theFirstName?
1
2
3
4
5
6var reg = /-(\w)/g;
var str = "the-first-name";
var newStr = str.replace(reg,function($,$1){
return $1.toUpperCase();
});
console.log(newStr);对数组去重?
1
2
3var str = "aaaaaaaaaaabbbbbbbbbcccccccc";
var reg = /(\w)\1*/g;
console.log(str.replace(reg,"$1"));请将aaaaaabbbbbb的字符串调换成bbbbbbaaaaaa的形式?
1
2
3var reg = /(\w{6})(\w{6})/g;
var str = "aaaaaabbbbbb";
console.log(str.replace(reg,"$2$1"));用.将str字符串从后向前3位3位截断?
1 | var reg = /(?=(\B)(\d{3})+$)/g; |
- 如何获取一个字符串中的数字字符,并以数组形式输出,如dgfhfgh234bhku259fakhdy678fh输出的是[234,259,678];
1 | var str = "dgfhfgh234bhku259fakhdy678fh"; |
- 把字符串中的
-和_和@的后一个字母变成大写?
1 | var str='background-color@good-morning_bad-afternoon@fine_thank'; |
- 邮箱种类?
qq邮箱:`130*****63@qq.com`
网易邮箱:`JuctTr@163.com`
outlook邮箱:`Juct_Tr@outlook.com`
雅虎邮箱:`xxxx@yahoo.com.cn`
等等
1
2
3
4
5// 匹配邮箱的正则表达式:
/^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-z]{2,6}$/
// 或者:
/^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/
Juct_1919.tr_32@qq_132.net.com.cn
匹配整数:/(-?[1-9]\d*)|(0)/
匹配手机号码:/^1[34578]\d{9}$/
写一个function,清除字符串前后的空格。(兼容所有浏览器)
1
2
3
4
5function trim (str) {
if (str && typeof str === 'string') {
return str.replace(/^(\s*)|(\s*)$/g, "");
}
}
文章标题: JavaScript中的正则表达式
文章作者: 王奕聪,QQ:1301842163
许可协议:
©署名-非商用-相同方式共享 4.0
