正则表达式前瞻
A Regex positive lookahead
我想用 RegExp 从另一个字符串中获取一个子字符串。
来源:\abc\$
模式:/\+(?=$)$/
预期结果:\\
所以我希望在字符串的末尾得到结果,但是正向先行并不像我想要的那样工作。没有 (?=) 部分它可以工作,但给了我 $
符号 => \$
但我不需要它。
这里有什么问题?
谢谢。
您需要将行的 $
末尾放在先行中,因为先行不消耗字符。他们只是检查前一个标记是否跟在前瞻中的标记之后。
/\+(?=$$)/
问题是前瞻是零宽度断言。表达式的 (?=$)
部分不是 'consume' 字符。因此,表达式会在您向前看后查找字符串的末尾,但会找到 $
字符。
改用/\+(?=$$)/
您可能也打算使用捕获组;你确定第二个 $?
试试这个(如果字符串必须 $
终止):
/(\+)(?=$$)/
或这个(如果 $ 可以出现在字符串中的任何位置):
/(\+)(?=$)/
您的正则表达式:
\+(?=$)$
执行以下操作:
- 匹配反斜杠字符1次到无限次...
\+
- 正向预测匹配字符 $ ...
(?=$)
- 断言位置在行尾。
$
更正后的正则表达式为:
\+(?=$$)
这个正则表达式:
- 匹配反斜杠字符1次到无限次...
\+
- 正向先行匹配字符 $ 并断言它在行尾...
(?=$$)
主要问题是,正向前看不消耗一个字符。
它是一个零长度断言,就像行尾一样。
所以你必须在里面断言正向前看,即 $ 字符位于行尾。
我想用 RegExp 从另一个字符串中获取一个子字符串。
来源:\abc\$
模式:/\+(?=$)$/
预期结果:\\
所以我希望在字符串的末尾得到结果,但是正向先行并不像我想要的那样工作。没有 (?=) 部分它可以工作,但给了我 $
符号 => \$
但我不需要它。
这里有什么问题?
谢谢。
您需要将行的 $
末尾放在先行中,因为先行不消耗字符。他们只是检查前一个标记是否跟在前瞻中的标记之后。
/\+(?=$$)/
问题是前瞻是零宽度断言。表达式的 (?=$)
部分不是 'consume' 字符。因此,表达式会在您向前看后查找字符串的末尾,但会找到 $
字符。
改用/\+(?=$$)/
您可能也打算使用捕获组;你确定第二个 $?
试试这个(如果字符串必须 $
终止):
/(\+)(?=$$)/
或这个(如果 $ 可以出现在字符串中的任何位置):
/(\+)(?=$)/
您的正则表达式:
\+(?=$)$
执行以下操作:
- 匹配反斜杠字符1次到无限次...
\+
- 正向预测匹配字符 $ ...
(?=$)
- 断言位置在行尾。
$
更正后的正则表达式为:
\+(?=$$)
这个正则表达式:
- 匹配反斜杠字符1次到无限次...
\+
- 正向先行匹配字符 $ 并断言它在行尾...
(?=$$)
主要问题是,正向前看不消耗一个字符。
它是一个零长度断言,就像行尾一样。
所以你必须在里面断言正向前看,即 $ 字符位于行尾。