使用正则表达式获取字符串的第一部分?

时间:2014-01-02 08:15:59

标签: javascript regex

假设我有这个字符串:

blabla1 blabla2#blabla1 blabla2#blabla1 blabla2#blabla1 blabla2#blabla1 blabla2

我可以得到这个部分:

enter image description here

通过[^#]+$

test

可视化:

enter image description here

问题:

我如何获得(使用正则表达式)其他部分(不包括上一个#)?

enter image description here

2 个答案:

答案 0 :(得分:4)

我想,有一个先行

(.*)(?=#[^#]+$)

答案 1 :(得分:1)

/(.*)#[^#]*$/

结果是你的第一次捕获,整场比赛。

/(.*)#[^#]*$/.exec("foo#bar baz#qux quz")[1] === "foo#bar baz"

更好:

/^(.*)#([^#]*)$/

如果你正在为一些有目的的活动划分字符串,你可能实际上并不想删除它后面的最后一磅和文本 - 你只需要单独处理它。即使您希望处理每个部分的过程分开(例如,因此您可以将它们传递给相同的字符串而不是数组),您想要一个正则表达式 - 任何正则表达式的任何部分 - 在您的源代码中出现两次。它们往往是只写的,容易出错,所以它出现的每个地方都是你可能会重写的东西,当你去修改它时可能会搞砸。

这就是为什么我不进行前向断言 - 检索超出最后#的文本的正则表达式将与用于获取前面的文本的正则表达式相同,但前向断言将被替换为最后一部分是比赛的一部分。我通常不会对具有不重要部分的字符串进行分区,因此我希望匹配是整个字符串,我需要在不同的捕获中单独检查这些部分。

从这个任务完全是一个练习的角度来看,知道除了匹配你想要的东西之外,你还可以使用正则表达式来匹配你不想要的东西和抓住其余部分。