一、match方法
match方法是JavaScript中最简单的正则表达式截取字符串的方法。
match方法的语法如下:
string.match(regexp)
其中string表示要匹配的字符串,regexp是一个正则表达式对象。match方法会返回所有与正则表达式匹配的字符串数组。正则表达式中添加全局模式g可以匹配所有符合条件的字符串,否则只匹配第一个符合条件的字符串。
var str = "北京时间2016年7月1日18:00:00"; var reg = /\d{4}年\d{1,2}月\d{1,2}日\d{1,2}:\d{1,2}:\d{1,2}/g; var result = str.match(reg); console.log(result); //返回['2016年7月1日18:00:00']
上述代码中,正则表达式使用了\d表示任意数字字符,{n}表示匹配n个这样的字符,{n,m}表示匹配至少n个至多m个这样的字符。g表示全局模式。
match方法非常简单易用,但它只能返回符合条件的字符串数组,无法返回匹配到的嵌套子字符串,也无法修改原字符串。因此,match方法更适用于只需要检索字符串中是否包含目标子字符串的场景。
二、exec方法
exec方法是另一个正则表达式截取字符串的方法,它与match方法有所不同。exec方法是正则表达式对象的方法,可用来在字符串中查找特定的匹配,返回结果为数组。如果未找到匹配,则返回null。
exec方法的语法如下:
regexp.exec(string)
其中string表示要匹配的字符串,regexp是一个正则表达式对象。
var str = "abc123defg456hijk"; var reg = /\d+/g; var result; while ((result = reg.exec(str)) != null) { console.log(result[0]); } //输出123、456
代码中使用正则表达式匹配字符串中的所有数字串,返回结果为数字组成的数组。
需要注意的是,使用exec方法匹配时需要使用while循环遍历检索所有匹配到的子字符串。因为exec方法只返回第一个匹配到的子字符串并记录位置,每次循环都会重新搜索匹配到的下一个字符串。
三、substring方法
substring方法是JavaScript的默认字符串截取方法,在截取字符串方面也同样适用于正则表达式的操作。该方法返回一个新的字符串,原字符串不会被修改。
substring方法的语法如下:
string.substring(startIndex, stopIndex)
其中startIndex表示截取的起始位置,stopIndex表示截取的结束位置(不包括结束位置对应的字符,即结果字符串不包含该字符)。
var str = "2016-07-01"; var reg = /\d{4}-\d{1,2}-\d{1,2}/; var result = str.substring(str.search(reg)); console.log(result); //输出2016-07-01
上述代码中,search方法用于检索字符串中与正则表达式相匹配的子字符串的位置。substring方法截取起始位置为匹配到的子字符串位置,结束位置为字符串结尾。
需要注意的是,substring方法只能接受数值类型的参数,并且如果省略参数,则表示从0开始截取到字符串结尾。
四、replace方法
replace方法在字符串中查找字符串或匹配正则表达式,然后用新字符串或返回进行替换。该方法返回一个新的字符串,原字符串不会被修改。
replace方法的语法如下:
string.replace(regexp/substr, newSubStr/function)
其中regexp/substr表示要替换的字符串或正则表达式,newSubStr或function是新的子字符串或函数,用来替换在regexp/substr查找的子字符串或者匹配的正则表达式。
var str = "today is 2016-07-01"; var reg = /(\d{4})-(\d{1,2})-(\d{1,2})/; var result = str.replace(reg, function(match, year, month, day) { return day + '/' + month + '/' + year; }); console.log(result); //输出today is 01/07/2016
上述代码中,replace方法使用自定义函数将字符串中的日期格式进行了转换,返回新的字符串。
需要注意的是,如果使用正则表达式进行匹配的话,需要使用圆括号将想要捕获的部分括起来,以便在替换时使用。
五、split方法
split方法与replace方法类似,同样可以使用正则表达式进行字符串截取和分割。该方法返回一个字符串数组,原字符串不会被修改。
split方法的语法如下:
string.split(separator, limit)
其中separator表示使用的分隔符,limit表示分割后返回的数组的最大长度。
var str = "hello world"; var reg = /\s/; var result = str.split(reg); console.log(result); //输出['hello', 'world']
上述代码中,使用空格作为分隔符将字符串进行截取。
需要注意的是,如果省略limit参数,将返回所有分割后的子串。如果limit参数为0或负数,则返回空数组。
六、总结
本文详细阐述了JavaScript正则表达式在字符串截取方面的能力,包括match、exec、substring、replace、split等方法。读者可以根据实际需求选择最适合的方法进行操作。
需要注意的是,在使用正则表达式进行字符串截取时,需要了解正则表达式的写法和匹配规则,以便正确使用方法。另外,一些方法返回的是新的字串,而不是修改原字符串,因此操作时需要注意原字符串的保护和保存。