资讯专栏INFORMATION COLUMN

RegExp对象

wangdai / 2151人阅读

摘要:方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置返回结果不含该位置方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。

正则表达式

正则表达式 Regular Expression 是一种表达文本模式的方法 类似字符串的模板 通常用来按照"给定模式"匹配文本

新建正则表达式有两种方式:
字面量方式 以斜杠表示开始和结束

var regexp=/abc/;

另一种是使用RegExp构造函数

var regexp=new RegExp("abc");

RegExp构造函数还可以接受第二个参数,表示修饰符

var regex = new RegExp("xyz", "i");
// 等价于
var regex = /xyz/i;
实例方法 RegExp.prototype.test()

正则实例对象的test方法返回一个布尔值 表示当前模式是否能匹配参数字符串

/react/.test("react and vue");    //true

上面代码验证参数字符串中是否包含react 结果返回true

RegExp.prototype.exec()

正则实力对象的exec方法 用来返回匹配结果 如果匹配 则返回一个数组 成员是匹配成功的子字符串 否则返回null

var s="x_y_z";
var r1=/x/;
var r2=/a/;
var r3=/xy/;
r1.exec(s)   //[ "x", index: 0, input: "x_y_z" ]
r2.exec(s)   // null
r3.exec(s)   // null

exec方法的返回数组还包含以下两个属性:
input:整个原字符串。
index:整个模式匹配成功的开始位置(从0开始计数)。

var r=/a(b+)a/;
var arr=r.exec("_abbba_aba_");
console.log(arr)   //["abbba","bbb"]
console.log(arr.index)   // 1  从字符串的第二个位置开始匹配成功
console.log(arr.input)  //"_abbba_aba_"

如果正则表达式加上g修饰符 贼可以多次使用exec方法 下一次搜索的位置从上一次匹配成功结束的位置开始

var reg=/a/g;
var str="abc_abc_abc";
var r1=reg.exec(str);
console.log(r1);    //[ "a", index: 0, input: "abc_abc_abc" ]
var r2=reg.exec(str);
console.log(r2)   // [ "a", index: 4, input: "abc_abc_abc" ]
var r3=reg.exec(str);
console.log(r3);  //[ "a", index: 8, input: "abc_abc_abc" ]
匹配规则 特殊字符

正则表达式对一些不能打印的特殊字符,提供了表达方法
n 匹配换行键;
r 匹配回车键;
t 匹配制表符 ;
v 匹配垂直制表符;
f 匹配换页符;
0 匹配null字符;
xhh 匹配一个以两位十六进制数(x00-xFF)表示的字符;
uhhhh 匹配一个以四位十六进制数(u0000-uFFFF)表示的 Unicode 字符;

字符类

字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内

/[abc]/.test("hello")  //false   不包含a、b、c这三个字母中的任一个,所以返回false
/[abc]/.test("apple")  //true    包含字母a,所以返回true 

脱字符:
如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配

/[^abc]/.test("hello")  //true
/[^abc]/.test("bbbc")   //false

连字符:
对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围

/a-z/.test("b") // false  连字符不出现在方括号之中,就不具备简写的作用,只代表字面的含义,所以不匹配字符b
/[a-z]/.test("b") // true
重复类

精确匹配次数,使用大括号({})表示
{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次

/Ro{2}kie/.test("Rookie") // true  指定o连续出现2次
/Ro{2,5}kie/.test("Rooookie") // true  指定o连续出现2次到5次之间 
? 问号表示某个模式出现0次或1次,等同于{0, 1}。
* 星号表示某个模式出现0次或多次,等同于{0,}。
+ 加号表示某个模式出现1次或多次,等同于{1,}。


修饰符

表示模式的附加规则,放在正则模式的最尾部。

修饰符可以单个使用,也可以多个一起使用。

g修饰符:
g修饰符表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换。

var regex = /b/;
var str = "abba";

regex.test(str); // true
regex.test(str); // true
regex.test(str); // true

正则模式不含g修饰符,每次都是从字符串头部开始匹配。所以,连续做了三次匹配,都返回true

var regex = /b/g;
var str = "abba";

regex.test(str); // true
regex.test(str); // true
regex.test(str); // false

正则模式含有g修饰符,每次都是从上一次匹配成功处,开始向后匹配。因为字符串abba只有两个b,所以前两次匹配结果为true,第三次匹配结果为false

i修饰符:
默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大小写

/abc/.test("ABC") // false    
/abc/i.test("ABC") // true
//加了i修饰符以后,不考虑大小写,所以模式abc匹配字符串ABC

m修饰符:
m修饰符表示多行模式
会修改^和$的行为

字符串的方法 String.prototype.toLowerCase(),String.prototype.toUpperCase()

toLowerCase方法用于将一个字符串全部转为小写,toUpperCase则是全部转为大写。它们都返回一个新字符串,不改变原字符串

"Hello World".toLowerCase()
// "hello world"

"Hello World".toUpperCase()
// "HELLO WORLD"
String.prototype.charAt()

charAt方法返回指定位置的字符,参数是从0开始编号的位置

var s = new String("abc");

s.charAt(1) // "b"
s.charAt(s.length - 1) // "c"
String.prototype.charCodeAt()

charCodeAt方法返回字符串指定位置的 Unicode 码

"abc".charCodeAt(1) // 98
String.prototype.indexOf(),String.prototype.lastIndexOf()

indexOf方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配
indexOf方法还可以接受第二个参数,表示从该位置开始向后匹配。

"hello world".indexOf("o", 6) // 7

lastIndexOf方法的用法跟indexOf方法一致,主要的区别是lastIndexOf从尾部开始匹配,indexOf则是从头部开始匹配。

"hello world".lastIndexOf("o") // 7
String.prototype.slice()

slice方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)

"JavaScript".slice(0, 4) // "Java"

如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度

"JavaScript".slice(-6) // "Script"
String.prototype.substr()

substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice和substring方法的作用相同。
substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。

"JavaScript".substr(4, 6) // "Script"

如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串。

"JavaScript".substr(4, -1) // ""
String.prototype.substring()

substring方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)

"JavaScript".substring(0, 4) // "Java"
String.prototype.split()

split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。

"a|b|c".split("|") // ["a", "b", "c"]
surprise

让一个字符串反转

var str="abcde";
var arr=str.split("");
console.log(arr)   //[ "a", "b", "c", "d", "e" ]
var arr2=arr.reverse();
console.log(arr2)  //[ "e", "d", "c", "b", "a" ]
vvar str2=arr.toString();
console.log(str2);   //e,d,c,b,a

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108449.html

相关文章

  • JS中的正则表达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JS正则表达式精简教程(JavaScript RegExp 对象

    摘要:返回值是被找到的值。支持正则表达式的对象的方法方法检索与正则表达式相匹配的子字符串。该数组是通过在指定的边界处将字符串分割成子串创建的。注意报错正确示例附表修饰符修饰符描述执行对大小写不敏感的匹配。查找以十六进制数规定的字符。 什么是 RegExp? RegExp 是正则表达式的缩写。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以...

    ACb0y 评论0 收藏0
  • 【JavaScript】正则表达式

    摘要:对象对象对象表示正则表达式,它是对字符串执行模式匹配的强大工具。查找以十六进制数规定的字符。支持正则表达式的对象的方法方法描述检索与正则表达式相匹配的值。替换与正则表达式匹配的子串。 RegExp对象 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 直接量语法 /pattern/attributes 创建 RegExp 对象的语法 new R...

    894974231 评论0 收藏0
  • PocketLibs(2)—— 请求相关 path-to-regexp

    摘要:直接调用构造函数使用,一个可能含某种匹配模式的路径字符串作为它的必选参数,它返回一个正则对象。有两个方法返回一个正则对象,效果与调用构造函数一样返回一个函数,该函数与下面的返回的函数功能一样方法,同样接收一个路径字符串。 code in here使用path-to-regexp,我们可以在路径字符串中使用正则。如/:foo*/:bar?、/icon-:foo(d+).png等。像exp...

    Prasanta 评论0 收藏0
  • Javascript正则表达式入门

    摘要:返回值一个新的对象,具有指定的模式和标志。参数作用正则表达式规定匹配的类型。如果未找到匹配,则返回值为。返回值请注意,无论是否是全局模式,都会把完整的细节添加到它返回的数组中。字符串或正则表达式,从该参数指定的地方分割。 前言 PS:2018/03/27 优化文章格式,新增部分测试代码说起正则其实大家都会经常接触到,前端小到校验,大到插件随处可见,简单的方法也能实现需求,不过缺乏灵活性...

    joywek 评论0 收藏0
  • JavaScript标准库系列——RegExp对象(三)

    摘要:目录导语理解正则表达式模式的规则字符串和正则实例的属性和方法检索实例小结导语正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分高级程序设计一书开篇提到,这门语言最原始的应用就是处理输入验证操作,所以正则表达式从诞生那一刻就 目录 导语 1.理解正则表达式 2.模式的规则 3.字符串和正则实例的属性和方法 4.检索实例 5. 小结 导语 正则表达式是处理字符串的一门艺...

    邱勇 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<