在某些情况下有可能看的在正则表达式中有g、s和m等标记,也有可能是其三者的结合,例如gs、gm、gsm等,这些标记是什么含义呢?其实他们分别对应如下的含义:g为全局模式;s为单行模式;m为多行模式。下面就来举例说明
1. 全局模式
期望对要匹配的字符串匹配多次
1.1 下图中虽然使用了全局模式g,但是没有匹配出任何的字符,这是因为这个正则匹配工具https://regexr.com在默认的情况是单行匹配(将要匹配的字符串看成成一行,即使要匹配的字符串存在于多行上)

1.2 加上多行匹配模式后,效果如下。可以看到命中了两行。这里 “THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”是要匹配的字符串,但是这里使用了全局模式g,因此会对要匹配的字符串进行多次匹配

1.3 去掉全局匹配模式g后,可以看到对要匹配的字符串”THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”只匹配了一行

2. 单行模式
将要匹配的字符串看成是一个字符串,即使要匹配的字符串存在于多行上
2.1 例如:^/THE匹配下面整段字符串的开始,\?$匹配整段字符串的结尾

2.2 此时及时加上了全局匹配模式g,效果也是一样的,因为符合要求的字符串只有一处

3. 多行模式
要匹配的字符若含有多行的话,单独对每一行进行正则匹配
3.1 例如下面的正则表达式匹配字符串”THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.”,此时使用了多行模式会将下面的字符串看成多行,分别对每一行进行正则匹配;由于没有使用全局匹配,因此,即使下面的字符串中有两行满足正则表达式的要求,第二行中满足要求的字符串也不会被匹配

3.2 若要在多行模式下匹配所有满足正则表达式要求的行的话,可以加上全局模式。此时可以看到所有满足正则表达式要求的行都被匹配出来了
