RegExp对象
通过
字面量
、构造函数
、工厂符号
创建正则对象
字面量:/pattern/flags
构造函数:new RegExp(pattern [, flags])
工厂符号:RegExp(pattern [, flags])
实例方法
exec和text方法,如果指定了
g或者y
修饰符,每一次匹配成功后,RegExp
对象上都会这次匹配的lastIndex值,下次再匹配时,从lastIndex索引位置开始匹配。
reg.exec(str)
正则匹配字符串,返回一个数组/null,该数组包含index
和input
以及其它属性
// 构造函数创建,也可以通过其它两种形式创建,只有加g/y修饰符才会记录lastIndex值
var reg = new RegExp("o","g");
var str = "How are you!";
var result = reg.exec(str);
console.log(result);
console.log(reg.lastIndex); // 2
result = reg.exec(str);
console.log(reg.lastIndex); //10
reg.test(str)
正则检测匹配字符串是否存在,返回true/false
引用方法
正则使用这些方法时,是基于String对象进行内部调用,js内部已经处理了
str.match(regexp)
返回一个字符串正则匹配后的结果,它只匹配不捕获
,该结果是一个数组/null
str.matchAll(regexp)
返回一个字符串正则匹配后的结果,它匹配和捕获
,结果为一个迭代器,存放了多个匹配结果,通过调用.next()
方法进入控制和输出。
str.search(reg)
返回字符串与正则第一项匹配的索引
,未匹配返回-1
str.replace(reg|str,newStr|function)
对字符串进行匹配替换,返回一个新字符串,如果新字符串是一个回调函数,则回调函数返回值将替代匹配上的结果。
str.split([separator|reg[, limit]])
以指定格式分割字符串,返回一个新数组,limit限定返回分割的段数
特殊字符
元字符
.
匹配任意单个字符,行结束符除外
\d
匹配[0-9]
\D
匹配[^0-9]
\w
匹配[A-Za-z0-9_]
\W
匹配[^A-Za-z0-9_]
\s
匹配空白符
\S
匹配非空白符
修饰符
g
全局匹配
i
忽略大小写
m
多行匹配
u
以Unicode模式匹配
y
粘连匹配,在每次匹配前,隐式添加边界符^
s
匹配任何字符
修饰符
[xyz]
,匹配集中的任一字符,用"-"指定匹配范围
[^xyz]
,不匹配集中的任一字符,用"-"指定匹配范围
边界
^
匹配输入开头
$
匹配输入结尾
\b
匹配零宽单词边界
\B
匹配非零宽单词边界
边界
(x)
捕获匹配项
\n
表示第n个括号匹配项
(?:x)
非捕获匹配项,只匹配,不捕获
数量词
x*
匹配0到多次
x+
匹配1到多次
x?
匹配0到1次
x|y
匹配x或y
{n}
连续匹配n次
x{n,}
连续匹配至少n次
x{n,m}
连续匹配至少n次,至多m次
断言
x(?=y)
仅匹配被y跟随的x
x(?!y)
仅匹配不被y跟随的x
(?<=y)x
x只有在y后面才匹配
(?<!y)x
x只有不在y后面才匹配
JSON对象
JSON不是javascript的子集语法,只是基于它,用来序列化
对象
、数组
、数值
、字符串
、布尔值
和 [null
]
parse(text[, fn])
解析JSON格式字符串,返回解析后的对象,支持传入一个函数,用于修改解析本应该返回的值。
const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);
console.log(obj.count); // 42
console.log(obj.result); // true
// 传入一个函数,将解析值5返回前,进行修改再返回
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v; // 如果到了最顶层,则直接返回属性值,
return v * 2; // 否则将属性值变为原来的 2 倍。
}); // { p: 10 }
stringify()
将对象/数组转化为JSON格式的字符串
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
Error对象
当运行时错误产生时,Error的实例对象会被抛出,也可以自定义抛出异常,各个浏览器中对于错误属性的支持程度不一致。
错误属性
message
错误描述信息
fileName
发生错误的文件名
lineNumber
文件名内具体行yiji号
stack
错误信息堆
6种类型错误
EvalError
错误与 eval() 有关
RangeError
超出边界值范围
ReferenceError
无效引用
SyntaxError
语法错误
TypeError
类型无效/错误
URIError
传递的Url链接参数无效
// 抛出一个基本错误
try {
throw new Error("Whoops!");
} catch (e) {
alert(e.name + ": " + e.message);
}
// 处理一个指定错误
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
alert(e.name + ": " + e.message);
} else if (e instanceof RangeError) {
alert(e.name + ": " + e.message);
}
// ... etc
}