正则表达式,的一些常用知识,自查

////////////////////////////////////////////////////////////////////////////////////////////////////////

slice 获取子字符串
substring 获取子字符串
substr 获取子字符串
charAt 获取某个字符
split 分割字符串,获得数组
search 查找
replace 替换

////////////////////////////////////////////////////////////////////////////////////////////////////////

正则表达式是被用来匹配字符串中的字符组合的模式。
在JavaScript中,正则表达式也是对象。
这种模式可以被用于 RegExp 的 exec() 和 test() 方法以及 String 的 match()、replace()、search() 和 split() 方法。

////////////////////////////////////////////////////////////////////////////////////////////////////////

你可以通过下面两种方法创建一个正则表达式:
使用一个正则表达式字面量,如下所示: var re = /abc/; 正则表达式字面量在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能。
调用RegExp对象的构造函数,如下所示: var re = new RegExp(“abc”); (new操作符我们《JavaScript高级》课程详细介绍,这里记住即可)

////////////////////////////////////////////////////////////////////////////////////////////////////////

根据匹配字符串切割父字符串

eg: 根据空格切割字符串:‘aa bbb c dd eeeeee’

‘aa bbb c dd eeeeee’.split(/\s+/)

=> [“aa”, “bbb”, “c”, “dd”, “eeeeee”]

练习:根据字母a切割字符串’bbaacaaaadddaeeeeeaaf’

////////////////////////////////////////////////////////////////////////////////////////////////////////

寻找匹配字符串在父字符串中位置

eg:在‘abcdefg’中寻找‘cd’位置

‘abcdefg’.search(/cd/)

=> 2

练习:在字符串’aaaa o o bbb aaa’中寻找‘o o’位置

 var str="aaaa o  o bbb aaa"
      var str1= str.search(/o/)
      var str2= str.indexOf("o")
      console.log(str1)//5
      console.log(str2)//5

////////////////////////////////////////////////////////////////////////////////////////////////////////

在父字符串中寻找匹配字符串

在 ‘abbcccbbbbbddbbbdabbb’ 中查询重复 ‘b’ 字符串

‘abbcccbbbbbddbbbdabbb’.match(/b+/g)

=> [“bb”, “bbbbb”, “bbb”, “bbb”]

练习:'aaaa o o bbb o o aaa’找寻所有‘o o’字符串

	var str="aaaa o  o bbb o     o  aaa"
    var str2="bbaabbccbbdddbbbbeebbw"
      var str1= str.match(/o/)
      var str22=str2.match("bb")
      var str222=str2.match(/b+/g)

      console.log(str1)
     // ["o", index: 5, input: "aaaa o  o bbb o     o  aaa", groups: undefined]
     console.log(str22)//["bb", index: 0, input: "bbaabbccbbdddbbbbeebbw", groups: undefined]
     console.log(str222)//["bb", "bb", "bb", "bbbb", "bb"]
  
  //类数组:它是融合了数组和对象的一个对象,他可以使用数组的方法,有数组的属性,他也可以使用对象的方法,有对象的属性。
//正则表达式中,是一个严格模式,一定注意,不要乱添加空格。

////////////////////////////////////////////////////////////////////////////////////////////////////////

替换父字符串中匹配字符串

eg:将’www.iqianduan.com’替换成’www.icketang.com’

‘www.iqianduan.com’.replace(/iqianduan/, ‘icketang’)

=> “www.icketang.com”

练习:过滤字符串中空格:'aa b c d e f ’ => “aabcdef”

var str="aa   b    c  d e    f   "
    var str1=str.replace(/\s+/g,'')
  console.log(str1)

////////////////////////////////////////////////////////////////////////////////////////////////////////

在字符串中寻找匹配字符串,该方法比其他正则方法或字符串方法支持的更复杂

eg:在’aaaabccccbacabc’中查找’abc’字符串

var result = /abc/.exec(‘aaaabccccbacabc’)

result => [“abc”]
result.index => 3

练习:在’ooooo 0 0 ooooooooooo’字符串中匹配[“o 0 0 o”]

var str="ooooo  0 0  ooooooooooo"
  var str1=/o  0 0  o/.exec(str)
  console.log(str1)

////////////////////////////////////////////////////////////////////////////////////////////////////////

检测字符串是否匹配正则表达式

eg:判断’aaddccddabcddeeddfff’是否包含’abc’字符串

/abc/.test(‘aaddccddabcddeeddfff’)

=> true

练习:检测’a bc’和’abc’是否包含空格

 var str="a  bc"
  var a=/\s/
  console.log(a.test(str))
  var demo=prompt("不能输入空格")
  alert(!(a.test(demo)));

////////////////////////////////////////////////////////////////////////////////////////////////////////

正则表达式中特殊字符

正则表达式:
由一些普通字符和一些特殊字符(又叫元字符–metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义
特殊字符:
javascript中常用特殊字符有
( ) [ ] { } \ ^ $ | ? * + .
若想匹配这类字符必须用转移符号 \ 如:(,^,\

预定义特殊字符

\t /\t/ 制表符 eg: console.log(/\t/.test(’ '))
\n /\n 回车符 eg: console.log(/\n/.test(“aaa
bbb”));
\f /\f/ 换页符
\b /\b/ 与回退字符

字符集

  1. 简单类:正则的一个字符对应一个字符,我们可以用[]把它们括起来,让[]这个整体对应一个字符 [abc]
    例子:o[usb]t——obt、ost、out
  2. 范围类:有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线。 [a-z]、[0-9]、[A-Z]
    例子:id[0-9]——id0、id5
  3. 负向类:[]前面加个元字符进行取反,表示匹配不能为括号里面的字符。 [^a] 例子:o[^0-9]t——oat、o?t、o t
  4. 组合类:允许用中括号匹配不同类型的单个字符–练习 [0-9a-b] 例子:o[0-9a-b]t——oat、o?t、o
  5. List item

分界

^ 开头 注意不能紧跟于左中括号的后面
/^hello/.test(‘hello icketang’) => true
/^icketang/.test(‘hello icketang’) => false

$ 结尾
/icketang / . t e s t ( ′ h e l l o i c k e t a n g ′ ) = > t r u e / h e l l o /.test('hello icketang') => true /hello /.test(helloicketang)=>true/hello/.test(‘hello icketang’) => false

\b 单词边界 指[a-zA-Z_0-9]之外的字符
‘hello icketang’.match(/\b\w+\b/g) => [“hello”, “icketang”]

\B 非单词边界

预定义类

. [^\n\r] 除了换行和回车之外的任意字符
/^.+KaTeX parse error: Expected 'EOF', got '#' at position 11: /.test('a@#̲12') => true \…/.test(‘125’) => true
\D [^0-9] 非数字字符
/^\D+KaTeX parse error: Undefined control sequence: \s at position 26: …5') => false \̲s̲ ̲[ \t\n\x0B\f\r]…/.test(’ ') => true
\S [^ \t\n\x0B\f\r] 非空白字符
/^\S+KaTeX parse error: Double superscript at position 12: /.test(' '̲) => true \w …/.test(‘abCD’) => true
\W [^a-zA-Z_0-9] 非单词字符
/^\W+$/.test(‘abCD’) => true

量词

? 软性量词 出现零次或一次
/ab?c/.test(‘abc’) => true /ab?c/.test(‘ac’) => true
* 软性量词 出现零次或多次(任意次)
/abc/.test(‘abbc’) => true /abc/.test(‘ac’) => true
+ 软性量词 出现一次或多次(至道一次)
/ab+c/.test(‘abbc’) => true /ab+c/.test(‘ac’) => false
{n} 硬性量词 对应零次或者n次
/ab{3}c/.test(‘abbbc’) => true /ab{3}c/.test(‘abbc’) => false
{n,m}软性量词 至少出现n次但不超过m次(中间不能有空格)
/ab{3,5}c/.test(‘abbbbbc’) => true /ab{3,5}c/.test(‘abc’) => false
{n,} 软性量词 至少出现n次(+的升级版)
/ab{3,}c/.test(‘abc’) => false /ab{3,}c/.test(‘abbbbbbbbc’) => true

修饰符

g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
‘12a34b56c78d90e’.match(/\d+/) => [“12”]
‘12a34b56c78d90e’.match(/\d+/g) => [“12”, “34”, “56”, “78”, “90”]

i 修饰符用于执行对大小写不敏感的匹配。
‘aabAAcAa’.match(/aa/g) => [“aa”]
‘aabAAcAa’.match(/aa/gi) => [“aa”, “AA”, “Aa”]

m,表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(不常用)

分组

虽然量词的出现,能帮助我们处理一排密紧密相连的同类型字符。但这是不够的,我们用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,我们就要用小括号进行分组了。

/(bye){2}/.test(‘byebye’)
=> true

/(bye){2}/.test(‘bye’)
=> false

分组的反向引用

反向引用标识是对正则表达式中的匹配组捕获的子字符串进行编号,通过“\编号(在表达式中)”,“$编号(在表达式外)”进行引用。从1开始计数。

/(bye)\1/.test(‘byebye’) => true
/(bye)\1/.test(‘bye’) => false

‘123456’.replace(/(\d{3})*(\d{3})/, '$2$1’) => “456*123”

‘123456’.replace(/(\d{3})*(\d{3})/, function (match, $1, $2) {
return $2 + '
’ + $1
})
=> “456*123”

中文

匹配中文:[\u4e00-\u9fa5]

/[\u4e00-\u9fa5]+/.test(‘爱创课堂’)
=> true

/[\u4e00-\u9fa5]+/.test(‘aaa’)
=> false

实战

检测是否是2到4位汉字
检测是否是手机号
检测是否是邮箱
检测昵称是否是由数字字母下划线组成
检测昵称是否是有汉字字母数字下划线组成

作业

检测是否是数字,包括整数,小数
检测是否是本地电话,如010-12345678,0418-12345678
将用户输入的网址全部转化成我们的官网。如www.baidu.com=>www.icketang.com
实现trim(str)方法,过滤字符串首位空白
获取

hello icketang

内部文案
div#demo.demo转化成

关于replace的两个小例子

//replace分组,直接在替代字符串中就用$1、$2来表示捕获的东西
		 var str = "Kobe Bryant";
		 str = str.replace(/(\w+)\s(\w+)/,"$2 $1");
		 console.log(str);//Bryant  Kobe
		var dictionary = {
			xingming : "考拉",
			nianling : "18",
			xingbie : "女",
			nvyougeshu : 500
		}

		var str = "大家好,我叫★xingming★,我今年★nianling★岁了,我是个可爱的★xingbie★生,我的女朋友有★nvyougeshu★个"
		
		str = str.replace(/★(\w+)★/g,function(match,$1){
			return dictionary[$1];
		});

		console.log(str);

你可能感兴趣的:(js)