假设我有这个字符串:
blabla1 blabla2#blabla1 blabla2#blabla1 blabla2#blabla1 blabla2#blabla1 blabla2
我可以得到这个部分:
通过[^#]+$
(test)
可视化:
问题:
我如何获得(使用正则表达式)其他部分(不包括上一个#
)?
答案 0 :(得分:4)
我想,有一个先行
(.*)(?=#[^#]+$)
答案 1 :(得分:1)
/(.*)#[^#]*$/
结果是你的第一次捕获,不整场比赛。
/(.*)#[^#]*$/.exec("foo#bar baz#qux quz")[1] === "foo#bar baz"
更好:
/^(.*)#([^#]*)$/
如果你正在为一些有目的的活动划分字符串,你可能实际上并不想删除它后面的最后一磅和文本 - 你只需要单独处理它。即使您希望处理每个部分的过程分开(例如,因此您可以将它们传递给相同的字符串而不是数组),您不想要一个正则表达式 - 任何正则表达式的任何部分 - 在您的源代码中出现两次。它们往往是只写的,容易出错,所以它出现的每个地方都是你可能会重写的东西,当你去修改它时可能会搞砸。
这就是为什么我不进行前向断言 - 检索超出最后#
的文本的正则表达式将与用于获取前面的文本的正则表达式相同,但前向断言将被替换为最后一部分是比赛的一部分。我通常不会对具有不重要部分的字符串进行分区,因此我希望匹配是整个字符串,我需要在不同的捕获中单独检查这些部分。
从这个任务完全是一个练习的角度来看,知道除了匹配你想要的东西之外,你还可以使用正则表达式来匹配你不想要的东西和抓住其余部分。