zoukankan      html  css  js  c++  java
  • JS常用正则表达式备忘录

    摘要: 玩转正则表达式。

    Fundebug经授权转载,版权归原作者所有。

    正则表达式或“regex”用于匹配字符串的各个部分 下面是我创建正则表达式的备忘单。

    匹配正则

    使用 .test() 方法

    let testString = "My test string";
    let testRegex = /string/;
    testRegex.test(testString);
    

    匹配多个模式

    使用操作符号 |

    const regex = /yes|no|maybe/;    
    

    忽略大小写

    使用i标志表示忽略大小写

    const caseInsensitiveRegex = /ignore case/i;
    const testString = 'We use the i flag to iGnOrE CasE';
    caseInsensitiveRegex.test(testString); // true
    

    提取变量的第一个匹配项

    使用 .match() 方法

    const match = "Hello World!".match(/hello/i); // "Hello"
    

    提取数组中的所有匹配项

    使用 g 标志

    const testString = "Repeat repeat rePeAT";
    const regexWithAllMatches = /Repeat/gi;
    testString.match(regexWithAllMatches); // ["Repeat", "repeat", "rePeAT"]   
    

    匹配任意字符

    使用通配符. 作为任何字符的占位符

    // To match "cat", "BAT", "fAT", "mat"
    const regexWithWildcard = /.at/gi;
    const testString = "cat BAT cupcake fAT mat dog";
    const allMatchingWords = testString.match(regexWithWildcard); // ["cat", "BAT", "fAT", "mat"]    
    

    用多种可能性匹配单个字符

    • 使用字符类,你可以使用它来定义要匹配的一组字符
    • 把它们放在方括号里 []
    //匹配 "cat" "fat" and "mat" 但不匹配 "bat"
    const regexWithCharClass = /[cfm]at/g;
    const testString = "cat fat bat mat";
    const allMatchingWords = testString.match(regexWithCharClass); // ["cat", "fat", "mat"]    
    

    匹配字母表中的字母

    使用字符集内的范围 [a-z]

    const regexWidthCharRange = /[a-e]at/;
    
    const regexWithCharRange = /[a-e]at/;
    const catString = "cat";
    const batString = "bat";
    const fatString = "fat";
    
    regexWithCharRange.test(catString); // true
    regexWithCharRange.test(batString); // true
    regexWithCharRange.test(fatString); // false
    

    匹配特定的数字和字母

    你还可以使用连字符来匹配数字

    const regexWithLetterAndNumberRange = /[a-z0-9]/ig;
    const testString = "Emma19382";
    testString.match(regexWithLetterAndNumberRange) // true
    

    匹配单个未知字符

    要匹配您不想拥有的一组字符,使用否定字符集 ^

    const allCharsNotVowels = /[^aeiou]/gi;
    const allCharsNotVowelsOrNumbers = /[^aeiou0-9]/gi;
    

    匹配一行中出现一次或多次的字符

    使用 + 标志

    const oneOrMoreAsRegex = /a+/gi;
    const oneOrMoreSsRegex = /s+/gi;
    const cityInFlorida = "Tallahassee";
    
    cityInFlorida.match(oneOrMoreAsRegex); // ['a', 'a', 'a'];
    cityInFlorida.match(oneOrMoreSsRegex); // ['ss'];   
    

    匹配连续出现零次或多次的字符

    使用星号 *

    const zeroOrMoreOsRegex = /hi*/gi;
    const normalHi = "hi";
    const happyHi = "hiiiiii";
    const twoHis = "hiihii";
    const bye = "bye";
    
    normalHi.match(zeroOrMoreOsRegex); // ["hi"]
    happyHi.match(zeroOrMoreOsRegex); // ["hiiiiii"]
    twoHis.match(zeroOrMoreOsRegex); // ["hii", "hii"]
    bye.match(zeroOrMoreOsRegex); // null
    

    惰性匹配

    • 字符串中与给定要求匹配的最小部分
    • 默认情况下,正则表达式是贪婪的(匹配满足给定要求的字符串的最长部分)
    • 使用 ? 阻止贪婪模式(惰性匹配 )
    const testString = "catastrophe";
    const greedyRexex = /c[a-z]*t/gi;
    const lazyRegex = /c[a-z]*?t/gi;
        
    testString.match(greedyRexex); // ["catast"]
    testString.match(lazyRegex); // ["cat"]   
    

    匹配起始字符串模式

    要测试字符串开头的字符匹配,请使用插入符号^,但要放大开头,不要放到字符集中

    const emmaAtFrontOfString = "Emma likes cats a lot.";
    const emmaNotAtFrontOfString = "The cats Emma likes are fluffy.";
    const startingStringRegex = /^Emma/;
    
    startingStringRegex.test(emmaAtFrontOfString); // true
    startingStringRegex.test(emmaNotAtFrontOfString); // false    
    

    代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

    匹配结束字符串模式

    使用 $ 来判断字符串是否是以规定的字符结尾

    const emmaAtBackOfString = "The cats do not like Emma";
    const emmaNotAtBackOfString = "Emma loves the cats";
    const startingStringRegex = /Emma$/;
    
    startingStringRegex.test(emmaAtBackOfString); // true
    startingStringRegex.test(emmaNotAtBackOfString); // false    
    

    匹配所有字母和数字

    使用word 简写

    const longHand = /[A-Za-z0-9_]+/;
    const shortHand = /w+/;
    const numbers = "42";
    const myFavoriteColor = "magenta";
    
    longHand.test(numbers); // true
    shortHand.test(numbers); // true
    longHand.test(myFavoriteColor); // true
    shortHand.test(myFavoriteColor); // true
    

    除了字母和数字,其他的都要匹配

    W 表示 w 的反义

    const noAlphaNumericCharRegex = /W/gi;
    const weirdCharacters = "!_$!!";
    const alphaNumericCharacters = "ab283AD";
    
    noAlphaNumericCharRegex.test(weirdCharacters); // true
    noAlphaNumericCharRegex.test(alphaNumericCharacters); // false
    

    匹配所有数字

    你可以使用字符集[0-9],或者使用简写 d

    const digitsRegex = /d/g;
    const stringWithDigits = "My cat eats $20.00 worth of food a week.";
    
    stringWithDigits.match(digitsRegex); // ["2", "0", "0", "0"]
    

    匹配所有非数字

    D 表示 d 的反义

    const nonDigitsRegex = /D/g;
    const stringWithLetters = "101 degrees";
    
    stringWithLetters.match(nonDigitsRegex); // [" ", "d", "e", "g", "r", "e", "e", "s"]
    

    匹配空格

    使用 s 来匹配空格和回车符

    const sentenceWithWhitespace = "I like cats!"
    var spaceRegex = /s/g;
    whiteSpace.match(sentenceWithWhitespace); // [" ", " "]
    

    匹配非空格

    S 表示 s 的反义

    const sentenceWithWhitespace = "C a t"
    const nonWhiteSpaceRegex = /S/g;
    sentenceWithWhitespace.match(nonWhiteSpaceRegex); // ["C", "a", "t"]
    

    匹配的字符数

    你可以使用 {下界,上界} 指定一行中的特定字符数

    const regularHi = "hi";
    const mediocreHi = "hiii";
    const superExcitedHey = "heeeeyyyyy!!!";
    const excitedRegex = /hi{1,4}/;
    
    excitedRegex.test(regularHi); // true
    excitedRegex.test(mediocreHi); // true
    excitedRegex.test(superExcitedHey); //false
    

    匹配最低个数的字符数

    使用{下界, }定义最少数量的字符要求,下面示例表示字母 i 至少要出现2次

    const regularHi = "hi";
    const mediocreHi = "hiii";
    const superExcitedHey = "heeeeyyyyy!!!";
    const excitedRegex = /hi{2,}/;
    
    excitedRegex.test(regularHi); // false
    excitedRegex.test(mediocreHi); // true
    excitedRegex.test(superExcitedHey); //false
    

    匹配精确的字符数

    使用{requiredCount}指定字符要求的确切数量

    const regularHi = "hi";
    const bestHi = "hii";
    const mediocreHi = "hiii";
    const excitedRegex = /hi{2}/;
    
    excitedRegex.test(regularHi); // false
    excitedRegex.test(bestHi); // true
    excitedRegex.test(mediocreHi); //false  
    

    匹配0次或1次

    使用 ? 匹配字符 0 次或1次

    const britishSpelling = "colour";
    const americanSpelling = "Color";
    const languageRegex = /colou?r/i;
    
    languageRegex.test(britishSpelling); // true
    languageRegex.test(americanSpelling); // true
    

    关于Fundebug

    Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用

  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/fundebug/p/10788906.html
Copyright © 2011-2022 走看看