在JS中使用正则表达式(2种方式)
使用 RegExp 构造函数可以定义正则表达式对象,具体语句格式如下:
new RegExp(pattern, attributes);
参数 pattern 是一个字符串,指定匹配模式或者正则表达式对象。参数 attributes 是一个可选的修饰性标志,包含 g i 和 m 三个选项,分别设置全局匹配、区分大小写的匹配和多行匹配;如果参数 pattern 是正则表达式对象,则必须省略该参数。
该函数返回一个新的 RegExp 对象,该对象包含指定的匹配模式和匹配标志。
下面示例使用 RegExp 构造函数定义了一个简单的正则表达式,匹配模式为字符 a ,没有设置第二个参数,所以这个正则表达式只能匹配字符串中第一个小写字母 a ,后面的字母 a 将无法被匹配到。
var r = new RegExp( a //构造最简单的正则表达式 var s = JavaScript != JAVA //定义字符串直接量 var a = s.match(r); //调用正则表达式执行匹配操作,返回匹配的数组 console.log(a); //返回数组[ a ] console.log(a.index); //返回值为1,匹配的下标位置
如果希望匹配字符串中所有的字母 a,且不区分大小写,则可以在第 2 个参数中设置 g 和 i 修饰词。
var r = new RegExp( a , gi //设置匹配模式为全局匹配,且不区分大小写 var s = JavaScript != JAVA //字符串直接量 var a = s.match(r); //匹配查找 console.log(a); //返回数组[ a , a , A , A ]
在正则表达式中可以使用特殊字符。下面示例的正则表达式将匹配字符串 JavaScript JAVA 中每个单词的首字母。
var r = new RegExp( //b//w , gi //构造正则表达式对象 var s = JavaScript JAVA //字符串直接量 var a = s.match(r); //匹配查找 console.log(A); //返回数组[ j , J ]
在上面示例中,字符串 //b//w 表示一个匹配模式,其中 /b 表示单词的边界, /w 表示任意 ASCII 字符,反斜杠表示转义序列。为了避免 Regular() 构造函数的误解,必须使用 // 替换所有 / 字符,使用双反斜杠表示斜杠本身的意思。
在脚本中动态创建正则表达式时,使用构造函数 RegExp() 会更方便。例如,如果检索的字符串是由用户输入的,那么就必须在运行时使用 RegExp() 构造函数来创建正则表达式,而不能使用其他方法。
如果 RegExp() 构造函数的第 1 个参数是一个正则表达式,则第 2 个参数可以省略。这时 RegExp() 构造函数将创建一个参数相同的正则表达式对象。
var r = new RegExp( //b//w , gi //构造正则表达式 var r1 = new RegExp(r); //把正则表达式传递给RegExp()构造函数 var s = JavaScript JAVA //字符串直接量 var a = s.match(r); //匹配查找 console.log(a); //返回数组[ j , J ]
把正则表达式直接量传递给 RegExp() 构造函数,可以进行类型封装。
RegExp() 也可以作为普通函数使用,这时与使用 new 运算符调用构造函数功能相同。不过如果函数的参数是正则表达式,那么它仅返回正则表达式,而不再创建一个新的 RegExp() 对象。
var a = new RegExp( //b//w , gi //构造正则表达式对象 var b = new RegExp(a); //对正则表达式对象进行再封装 var c = RegExp(a); //返回正则表达式直接量 console.log(a.constructor == RegExp); //返回true console.log(b.constructor == RegExp); //返回true console.log(c.constructor == RegExp); //返回true正则表达式直接量
正则表达式直接量使用双斜杠作为分隔符进行定义,双斜杠之间包含的字符为正则表达式的字符模式,字符模式不能使用引号,标志字符放在最后一个斜杠的后面。语法如下:
/pattern/attributes
下面示例定义一个正则表达式直接量,然后进行调用。
var r = //b/w/gi; var s = JavaScript JAVA var a = s,match(r); //直接调用正则表达式直接量 console.log(a); //返回数组[ j , J ]
在 RegExp() 构造函数与正则表达式直接量语法中,匹配模式的表示是不同的。对于 RegExp() 构造函数来说,它接收的是字符串,而不是正则表达式的匹配模式。所以,在上面示例中,RegExp() 构造函数中第 1 个参数里的特殊字符,必须使用双反斜杠来表示,以防止字符串中的字符被 RegExp() 构造函数转义。同时对于第 2 个参数中的修饰符词也应该使用引号来包含。而在正则表达式直接量中每个字符都按正则表达式来定义,普通字符与特殊字符都会被正确解释。
在 RegExp() 构造函数中可以传递变量,而在正则表达式直接量中是不允许的。
var r = new RegExp( a + s + b , g //动态创建正则表达式 var r = / a + s + b /g; //错误的用法
在上面示例中,对于正则表达式直接量来说, 和 + 都将被视为普通字符进行匹配,而不是作为字符与变量的语法标识符进行连接操作。
JavaScript 正则表达式支持 g i 和 m 三个标志修饰符,简单说明如下。
g :global(全局)的缩写,定义全局匹配,即正则表达式将在指定字符串范围内执行所有匹配,而不是找到第一个匹配结果后就停止匹配。 i :case-insensitive(大小写不敏感)中 insensitive 的缩写,定义不区分大小写匹配,即对于字母大小写视为等同。 m :multiline(多行)的缩写,定义多行字符串匹配。
这三个修饰词分别指定了匹配操作的范围、大小写和多行行为,关键词可以自由组合。
23084.html
javaJavaScript相关文章
- Fabric.js 使用纯色遮挡画布(前景色)
- 使用 Dapr JS SDK 让 Nest.js 集成 Dapr(微软开源的分布式应用程序运行时)
- js验证手机号的正则表达式_js正则表达式验证数字
- js正则使用变量_js正则表达式语法大全
- Js生成二维码_js在线生成二维码
- vue.js和jquery的区别_人和人类的区别是什么
- JS获取当前年份_js获取当前时间年月日
- 如何使用jscythe并通过Node.js的Inspector机制执行任意JS代码
- 【源码】PDF.js批注注释插件库(纯JS). 创建和保存PDF批注(PDF 高亮/签名/插图/截屏/文本框/画笔/多边形)-pdf.js
- JS填充固定位数详解编程语言
- js使用正则表达式判断ip地址详解编程语言
- js获得checkbox选中值及input后面的文本详解编程语言
- js正则表达式的使用详解编程语言
- JS正则表达式从入门到入土(3)—— 范围类详解编程语言
- JS正则表达式从入门到入土(1)—— REGEXP对象详解编程语言
- JS的object类型怎么用详解编程语言
- js 整数、手机号正则表达式详解编程语言
- 使用JS技术实现Oracle数据库链接(js 链接 oracle)
- js模拟画笔效果
- 正则表达式提取网址、标题、图片等一例(.NetAspJavascript/Js)的实现
- 基于jquery的图片懒加载js
- js限制文本框为整数和货币的函数代码
- js正则表达式之match函数讲解
- JS事件Event元素(兼容IE,Firefox,Chorme)
- js网页中的(运行代码)功能实现思路
- js冒泡法和数组转换成字符串示例代码
- 利用js正则表达式验证手机号,email地址,邮政编码