续前篇

使用插入语

使用正则表达式的插入语都会使这部分匹配的副字符串记忆

一旦被记忆,这个副字符串就可以被调用于其他用途 => 正则的使用之“使用括号的子字符串匹配”

模式/(foo) (bar) \1 \2/中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 \1 和 \2 匹配字符串的后两个单词。注意 \1、\2、\n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。

使用正则表达式

正则表达式可以被用于RegExpexectest方法以及Stringmatchreplacesearchsplit方法。

使用正则表达式的方法:

  • exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)

  • test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false

  • match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null

  • search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1

  • replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串

  • split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法

  • 当你想要知道在一个字符串中的一个匹配是否被找到,你可以使用test或search方法

  • 想得到更多的信息(但是比较慢)则可以使用exec或match方法。如果你使用exec或match方法并且匹配成功了,那么这些方法将返回一个数组并且更新相关的正则表达式对象的属性和预定义的正则表达式对象。如果匹配失败,那么exec方法返回null

正则表达式执行返回信息

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
  • myArray(匹配到的字符串和所有被记住的子字符串组成的数组对象,其中第一个元素即匹配到的所有字符串)
    • 匹配到的字符串和所有被记住的子字符串
    • index属性:在输入的子字符串中匹配到的以0开始的索引值
    • input属性:初始字符串
  • myRe:原始的正则表达式对象
    • lastIndex:下一个匹配的索引值(这个属性只有在使用g参数时可用)
    • source:模式文本。在正则表达式创建时更新,不执行。

使用括号的子字符串匹配

一个正则表达式模式使用括号,将导致相应的子匹配被记住。

使用括号匹配的子字符串的数量是无限的,返回的数组中保存所有被发现的子匹配。

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);

通过标志进行高级搜索

正则表达式有四个可选参数进行全局和不分大小写搜索。

  • g:全局搜索
  • i:不区分大小写搜索
  • m:多行搜索
  • y:执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志

其他

  • 一个正则表达式可视化网站

  • 一段程序

// 将用户输入转义为正则表达式中的一个字面字符串
function escapeRegExp(string){
    return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$&"); 
    //$&表示整个被匹配的字符串,见String.replace
}

(本篇完)


书籍推荐