Giter Site home page Giter Site logo

houwhu.github.io's Introduction

个人主页 👋

github粉丝

houwhu.github.io's People

Stargazers

 avatar

Watchers

 avatar

houwhu.github.io's Issues

每日一个lodash方法(Object)-- 合并

$ npm i -g npm
$ npm i --save lodash

##为什么选择 Lodash ?

Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。
Lodash 的模块化方法 非常适用于:

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数

js 正则常用的方法

定义正则

 /* RegExp对象,参数就是我们想要制定的规则。有一种情况必须用这种方式,下面会提到。*/
 var re = new RegExp(“a”); 
 var re = /a/;      // 简写方法 推荐使用 性能更好  不能为空 不然以为是注释 ,

javascript 中正则表达式支持的正则表达式有三个,g、i、m,分别代表全局匹配、忽略大小写、多行模式。三种属性可以自由组合共存。


1、test():在字符串中查找符合正则的内容,若查找到返回true,反之返回false.

  • 用法:正则.test(字符串)
  • 例子: 判断是否是数字
   var str = '374829348791';
   var re = /\D/;      //  \D代表非数字
   if (re.test(str)) {   // 返回true,代表在字符串中找到了非数字。
       console.log('不全是数字');
   } else {
       console.log('全是数字');
   }

2、search():在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置), 如果搜索失败就返回 -1 。

  • 用法:字符串.search(正则)。
  • 例子:在字符串中查找字母 b 且不区分大小写
   var str = 'abcdBf';
   var re = /B/i;
   //var re = new RegExp('B','i'); 也可以这样写
   console.log( str.search(re) );  //  =>1

3、match():在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回null。

  • 用法:字符串.match(正则)。
  • 量词:+ 至少出现一次 匹配不确定的次数(匹配就是搜索查找的意思)。
  • 全局匹配:g——global(正则中默认,只要搜索符合规则的内容就会结束搜索 )。
  • 例子:找出指定格式的所有数字,如下找到 123,54,33,879
  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():查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。

  • 用法:字符串.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方法一样,搜索符合规则的内容,并返回内容,格式为数组。

  • 用法:正则.exec(字符串);
  • 属性:input(代表要匹配的字符串)
  • 举个栗子:不是全局匹配的情况:
    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   每次匹配成功的字符串中的第一个字符的位置
  • 再举个栗子:如果是全局匹配,可以通过while循环 找到每次匹配到的字符串,以及子项。每次匹配都接着上次的位置开始匹配。
    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
    }

js 正则表达式

js 正则表达式语法

正则表达式的语法体现在字符模式上。字符模式是一组特殊格式的字符串,它由一系列特殊字符和普通字符构成,其中每个特殊字符都包含一定的语义和功能。

描述字符

根据正则表达式语法规则,大部分字符仅能够描述自身,这些字符被称为普通字符,如所有的字母、数字等。

元字符就是拥有特动功能的特殊字符,大部分需要加反斜杠进行标识,以便于普通字符进行区别,而少数元字符,需要加反斜杠,以便转译为普通字符使用。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 前面加双反斜杠。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.