js正则表达式

正则

Posted by Lan on November 4, 2019

js正则表达式

https://www.jianshu.com/p/488d60349325

  • i

    忽略大小写匹配

  • g

    全局匹配

  • m

    多行匹配

  • match

    1. []
  • replace

     replace(/regexp/,(v,i){
          return v.toUpperCase();
      })
    

    例如用正则将一句英文中除了首字符的大写字母外的单词大写字母都替换为小写

“I’m A Good Boy!” -> “I’m a good boy!”

str.replace(/[A-Z]/g,(v,p)=>{
	  if(p!=0){return v.toLowerCase()}else return v
	})
  • exec

  • 积累
    • [ab]{2}[^abc] [ab]表示a或b {2}表示长度为2 [^defgh]表示非defgh的字符

    • [defgh]* *代表出现0次或者多次,这里表匹配空或括号内的任意字符

    • 正向先行断言 (?=pattern) 正向先行断言 代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。 例如对”a regular expression”这个字符串,要想匹配regular中的re,但不能匹配expression中的re,可以用”re(?=gular)”,该表达式限定了re右边的位置,这个位置之后是gular,但并不消耗gular这些字符,将表达式改为”re(?=gular).”,将会匹配reg,元字符.匹配了g,括号这一砣匹配了e和g之间的位置。 .匹配除“\n”和”\r”之外的任何单个字符。要匹配包括“\n”和”\r”在内的任何字符,请使用像“[\s\S]”的模式。 所以说在这里/…(?=.)/匹配的是: 前面任意三个字符,但是后面必须跟一个任意字符(除了\n和\r)。 但是题目给出来的字符串只有三个字符,该正则表达式至少要四个字符。

例子

  • 分割URL 如 url=http://www.baidu.com/love/java?lang=java
let url="http://www.baidu.com/love/java?lang=java";

let pattern=/(\w+):\/\/([^/:]+)(:\d*)([^?]+)([^#]*)/;

let arr= url.match(pattern);

结果

[
  'http://localhost:8080/love/java?lang=java',
  'http',
  'localhost',
  ':8080',
  '/love/java',
  '?lang=java',
  index: 0,
  input: 'http://localhost:8080/love/java?lang=java#dsd',
  groups: undefined
]