企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
大部分字符在正则表达式中,就是字面的含义,比如`/a/`匹配`a`,`/b/`匹配`b`。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的`a`和`b`),那么它们就叫做“字面量字符”(literal characters)。 ~~~ /dog/.test('old dog') // true ~~~ 上面代码中正则表达式的`dog`,就是字面量字符,所以`/dog/`匹配`old dog`,因为它就表示`d`、`o`、`g`三个字母连在一起。 除了字面量字符以外,还有一部分字符有特殊含义,不代表字面的意思。它们叫做“元字符”(metacharacters),主要有以下几个。 **(1)点字符(.)** 点字符(`.`)匹配除回车(`\r`)、换行(`\n`) 、行分隔符(`\u2028`)和段分隔符(`\u2029`)以外的所有字符。注意,对于码点大于`0xFFFF`字符,点字符不能正确匹配,会认为这是两个字符。 ~~~ /c.t/ ~~~ 上面代码中,`c.t`匹配`c`和`t`之间包含任意一个字符的情况,只要这三个字符在同一行,比如`cat`、`c2t`、`c-t`等等,但是不匹配`coot`。 **(2)位置字符** 位置字符用来提示字符所处的位置,主要有两个字符。 * `^`表示字符串的开始位置 * `$`表示字符串的结束位置 ~~~ // test必须出现在开始位置 /^test/.test('test123') // true // test必须出现在结束位置 /test$/.test('new test') // true // 从开始位置到结束位置只有test /^test$/.test('test') // true /^test$/.test('test test') // false ~~~ **(3)选择符(`|`)** 竖线符号(`|`)在正则表达式中表示“或关系”(OR),即`cat|dog`表示匹配`cat`或`dog`。 ~~~ /11|22/.test('911') // true ~~~ 上面代码中,正则表达式指定必须匹配`11`或`22`。 多个选择符可以联合使用。 ~~~ // 匹配fred、barney、betty之中的一个 /fred|barney|betty/ ~~~ 选择符会包括它前后的多个字符,比如`/ab|cd/`指的是匹配`ab`或者`cd`,而不是指匹配`b`或者`c`。如果想修改这个行为,可以使用圆括号。 ~~~ /a( |\t)b/.test('a\tb') // true ~~~ 上面代码指的是,`a`和`b`之间有一个空格或者一个制表符。 其他的元字符还包括`\`、`\*`、`+`、`?`、`()`、`[]`、`{}`等。