【发布时间】:2015-01-05 04:26:19
【问题描述】:
我想用 RegExp 从另一个字符串中获取一个子字符串。
来源:\\abc\\\$
模式:/\\+(?=\$)$/
预期结果:\\\
所以我希望在字符串的末尾得到结果,但是积极的前瞻并不能如我所愿。没有 (?=) 部分它可以工作,但给了我 $ 符号 => \\\$ 但我不需要它。
这里有什么问题?
谢谢。
【问题讨论】:
标签: regex
我想用 RegExp 从另一个字符串中获取一个子字符串。
来源:\\abc\\\$
模式:/\\+(?=\$)$/
预期结果:\\\
所以我希望在字符串的末尾得到结果,但是积极的前瞻并不能如我所愿。没有 (?=) 部分它可以工作,但给了我 $ 符号 => \\\$ 但我不需要它。
这里有什么问题?
谢谢。
【问题讨论】:
标签: regex
问题是向前看是一个零宽度的断言。表达式的 (?=\$) 部分不会“使用”字符。因此,表达式会在您向前看后查找字符串的结尾,但会找到 $ 字符。
改用/\\+(?=\$$)/
【讨论】:
【讨论】:
您可能也打算使用捕获组;你确定第二个 $?
试试这个(如果字符串必须以$ 结尾):
/(\\+)(?=\$$)/
或者这个(如果 $ 可以出现在字符串中的任何位置):
/(\\+)(?=\$)/
【讨论】:
你的正则表达式:
\\+(?=\$)$
执行以下操作:
\\+(?=\$)$
修正后的正则表达式为:
\\+(?=\$$)
这个正则表达式可以:
\\+(?=\$$)主要问题是,正向预读不消耗字符。
它是一个零长度的断言,就像行尾一样。
所以你必须在正向预读中断言,即$ 字符位于行尾。
【讨论】: