正则表达式积极lookahead
问题描述:
我想从另一个字符串与RegExp获取子字符串。正则表达式积极lookahead
来源:\\abc\\\$
模式:/\\+(?=\$)$/
预期结果:\\\
所以我期望得到的结果字符串的结束,但是正预测先行不为我工作想。没有(?=)部分它的工作,但给了我$
符号=>\\\$
,但我不需要它。
这里有什么问题?
谢谢。
答
的问题是,未来一看是一个零宽度断言。表达式的(?=\$)
部分不会“消耗”一个字符。因此,表达式在查找前查找字符串的结尾,但找到$
字符。
使用/\\+(?=\$$)/
代替
答
你可能意味着使用捕获组,太多;你确定第二个$?
试试这个(如果字符串必须$
终止):
/(\\+)(?=\$$)/
或本(如果$可以在字符串中的任何地方发生):
/(\\+)(?=\$)/
答
你的正则表达式:
\\+(?=\$)$
执行以下操作:
- 第1场和unlimmited时间之间的反斜杠字符...匹配的字符$的
\\+
- 正向前查找...
(?=\$)
- 断言的位置是在该行的末尾。
$
修正的正则表达式是:
\\+(?=\$$)
此正则表达式的作用:
- 第1场和unlimmited时间之间的反斜杠字符...
\\+
- 匹配字符$,并断言这是在该行的结束正向前查找...
(?=\$$)
的主要问题是,在正向前查找不消耗字符。
这是一个像行尾一样的零长度断言。
所以你必须在积极的向前看,$字符是在行的末尾。