houwhu / houwhu.github.io Goto Github PK
View Code? Open in Web Editor NEW斧子的博客。。。
斧子的博客。。。
$ npm i -g npm
$ npm i --save lodash
##为什么选择 Lodash ?
Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。
Lodash 的模块化方法 非常适用于:
/* RegExp对象,参数就是我们想要制定的规则。有一种情况必须用这种方式,下面会提到。*/
var re = new RegExp(“a”);
var re = /a/; // 简写方法 推荐使用 性能更好 不能为空 不然以为是注释 ,
javascript 中正则表达式支持的正则表达式有三个,g、i、m,分别代表全局匹配、忽略大小写、多行模式。三种属性可以自由组合共存。
1、test():在字符串中查找符合正则的内容,若查找到返回true,反之返回false.
var str = '374829348791';
var re = /\D/; // \D代表非数字
if (re.test(str)) { // 返回true,代表在字符串中找到了非数字。
console.log('不全是数字');
} else {
console.log('全是数字');
}
2、search():在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置), 如果搜索失败就返回 -1 。
b
且不区分大小写 var str = 'abcdBf';
var re = /B/i;
//var re = new RegExp('B','i'); 也可以这样写
console.log( str.search(re) ); // =>1
3、match():在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回null。
var str = 'haj123sdk54hask33dkhalsd879';
var re = /\d+/g;
// 每次匹配至少一个数字 且全局匹配 如果不是全局匹配,当找到数字123,它就会停止了。
// 就只会弹出123.加上全局匹配,就会从开始到结束一直去搜索符合规则的。如果没有加号,匹配
的结果就是1,2,3,5,4,3,3,8,7,9并不是我们想要的,
// 有了加号,每次匹配的数字就是至少一个了。
str.match(re); // => ['123', '54', '33', '879']
4、replace():查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。
var str = "我爱北京***,***上太阳升。";
var re = /北京|***/g; // 找到北京 或者*** 全局匹配
var str2 = str.replace(re, function (str) {
console.log(str); //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是*** 第三次str是***
var result = '';
for (var i = 0; i < str.length; i++) {
result += '*';
}
return result; // 所以搜索到了几个字就返回几个*
});
console.log(str2) //我爱*****,***上太阳升
//整个过程就是,找到北京,替换成了两个*,找到***替换成了3个*,找到***替换成3个*。
注意:* replace():stringObject.replace(regexp/substr,replacement)*
** 参数:
regexp/substr:必需。规定子字符串或要替换的模式的 RegExp 对象
replacement:必需。一个字符串值。规定了替换文本或生成替换文本的函数。
5、exec()方法:和match方法一样,搜索符合规则的内容,并返回内容,格式为数组。
var testStr = "now test001 test002";
var re = /test(\d+)/; //只匹配一次
var r = "";
var r = re.exec(testStr)
console.log(r);// test001 001 返回匹配结果,以及子项
console.log(r.length); //2 返回内容的长度
console.log(r.input); //now test001 test002 代表每次匹配成功的字符串
console.log(r[0]); //test001
console.log(r[1]); //001 代表每次匹配成功字符串中的第一个子项 (\d+)
console.log(r.index ); // 4 每次匹配成功的字符串中的第一个字符的位置
var testStr = "now test001 test002";
var re = /test(\d+)/g;
var r = "";
//匹配两次 每次匹配都接着上一次的位置开始匹配,一直匹配到最后r就为false,就停止匹配了 匹配到test001 test002
while(r = re.exec(testStr)){
console.log(r); // 返回每次匹配成功的字符串,以及子项,分别打印 :test001 001,test002 002
console.log(r.input); //分别弹出: now test001 test002 now test001 test002
console.log(r[0]); //代表每次匹配成功的字符串 分别打印: test001 test002
console.log(r[1]); //代表每次匹配成功字符串中的第一个子项 (\d+) 分别打印:001 002
console.log(r.index ); // 每次匹配成功的字符串中的第一个字符的位置,分别打印:4 12
console.log(r.length); //分别打印:2 2
}
正则表达式的语法体现在字符模式上。字符模式是一组特殊格式的字符串,它由一系列特殊字符和普通字符构成,其中每个特殊字符都包含一定的语义和功能。
根据正则表达式语法规则,大部分字符仅能够描述自身,这些字符被称为普通字符,如所有的字母、数字等。
元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。JavaScript 正则表达式支持的元字符如表所示。
元字符 | 描述 | 元字符 | 描述 |
---|---|---|---|
. | 查找单个字符,除了换行和行结束符 | \0 | 查找 NULL字符 |
\w | 查找单词字符 | \W | 查找非单词字符 |
\d | 查找数字 | \D | 查找非数字字符 |
\s | 查找空白字符 | \S | 查找非空白字符 |
\b | 匹配单词边界 | \B | 匹配非单词边界 |
\n | 查找换行符 | \f | 查找换页符 |
\r | 查找回车符 | \t | 查找制表符 |
\v | 查找垂直制表符 | \xxx | 查找以八进制数 xxxx 规定的字符 |
\xdd | 查找以十六进制数 dd 规定的字符 | \uxxxx | 查找以十六进制 xxxx规定的 Unicode 字符 |
表示字符的方法有多种,除了可以直接使用字符本身外,还可以使用 ASCII 编码或者 Unicode 编码来表示。
示例1
下面使用 ASCII 编码定义正则表达式直接量。
var r = /\x61/;
var s = "JavaScript";
var a = s.match(s);
由于字母 a 的 ASCII 编码为 97,被转换为十六进制数值后为 61,因此如果要匹配字符 a,就应该在前面添加“\x”前缀,以提示它为 ASCII 编码。
示例2
除了十六进制外,还可以直接使用八进制数值表示字符。
var r = /\141/;
var s = "JavaScript";
var a = s.match(r);
使用十六进制需要添加“\x”前缀,主要是为了避免语义混淆,而八进制则不需要添加前缀。
示例3
ASCII 编码只能够匹配有限的单字节字符,使用 Unicode 编码可以表示双字节字符。Unicode 编码方式:“\u”前缀加上 4 位十六进制值。
var r = "/\u0061/";
var s = "JavaScript";
var a = s.match(s);
在 RegExp() 构造函数中使用元字符时,应使用双斜杠。
var r = new RegExp("\\u0061");
RegExp() 构造函数的参数只接受字符串,而不是字符模式。在字符串中,任何字符加反斜杠还表示字符本身,如字符串“\u”就被解释为 u 本身,所以对于“\u0061”字符串来说,在转换为字符模式时,就被解释为“u0061”,而不是“\u0061”,此时反斜杠就失去转义功能。解决方法:在字符 u 前面加双反斜杠。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.