正则表达式依次行断言-必威体育官网下载_betway体育app_必威体育注册

一个 先后走断语(Lookaround Assertion)是正则表达式中的一个结构,清晰了当时方位的前后字符序列是什么,但没有其他副作用。亦称为零宽断语(Zero-width Assertion)。

当时 JavaSc羽绒服品牌ript 仅有支撑的 Lookaround Assertion 是 先行断语(L正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 ookahead Assertion)貔恘,其匹配当时方位接下来的正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 字符序列,而本章描绘的 后走断语 提案匹配的是当时方位前面的字符序列。

先行断歌唱家陈思思老公是谁言

正则表达式中的先行断语意味着:后续字符序列有必要与断语相匹配,但没有其他副作用。即,不捕获任何东西,且匹配到的字符串不包括断语部分。

以如下正则表达式为例:

const RE_上海图书馆AS_BS = /aa(?=bb)/;

它匹配字符串 'aabb',可是匹配到的内容是不包括 'bb' 的:

const match1 = RE_AS_BS.exec('aabb');
console.log(match1[0]); // 正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 'aa'

并且,它还不匹配那种没有两个 'b' 的字符串:

const match2 = RE_AS_BS.exec('aa性交故事b');
console.log(match2); // null

一个负向先行断语(Negative正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 Lookahead Assertion)意味着后续字符序列有必要与该别墅设计图纸及效果图大全断语不匹配 。例如:

> const RE_AS_NO_BS = /aa(?!bb)/;
> RE_ApoS_NO_BS.test('aabb')
false
> RE_AS_mightNO_BS.t正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 est('aab')
true
> RE_AS_NO_BS.test('aac')
true

后走断语

后走断语与先行断语的工作方法相似,可是方向相反。

正向后走断语

关于一个正向后走这个断语(Positive Lookbehind Assertion)来说,当时方位的前继字符序列有必要与该断语匹配(没有其他副作用)。

const RE_DOLLAR_PREFIX = /(?<=\$)foo/g;
'$foo %foo foo'.r女生怎样自慰eplace(RE_DOLLAR_PREFIX, 'bar');
// '正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 $b范荩ar %foo foo'

正如你所见,只是当时面是美元符号的那个 'foo' 被替换了。别的你也看到,由于美元字符后边的字符序列('f龙哥挥刀oo')政才老婆彻底被'bar'替换掉了,所以美元符号正则表达式顺次行断语-必威体育官网下载_betway体育app_必威体育注册 不是匹配成果的一部分。

不运用后走断语而想到达相同成果的完成方法就没这么高雅:

const RE_DOLLAR_PREFIX = /(\崔潇然$)foo假面骑士drive/g;
'$foo盐酸二甲双胍片 %foo foo'.replace(RE_DOLLAR_PREFIX, '$1bar');
// '$bar %foo foo'

假如前继字符也在上一个匹配中时,这种完成方法就不起作用了。

> 'a1ba2ba3b'.mat大便枯燥ch(/(?<=b)a.b/g)
[ 'a2b', 'a3b' ]

负向后走断语

负向后走断语(Negative Lookbehind Assertion)只是当时方位的前继字符序列与断语 不匹配 时才匹配,并无其他副作用。例如:西海情歌歌词

const RE_NO_DOLLAR_PREFIX = /(?
'$foo %foo foo'.replace(RE_NO_DOLLAR_PREFIX, 'bar');
// '$foo %bar bar'

假如不运用后走断语的话,要到达相同的成果,是没有其他简略的(一般的)完成方法。

总结

在正则表达式的尾部,运用先行断语最有含义。而在正则表达式的最初,运用后走断语最有含义。

运用先后走断语仇和的用例有:

  • replace()
  • match() (特别当正则表达式有修饰符 /g)
  • split() (留意 ' b,c' 开端处的空格):
> 'a, b,c'.split(/,(?= )/)
[ 'a', ' b,c' ]

除了上述用破例,你也随时能够在正则表达式中运用断语。

评论(0)