regex 多个正则表达式向后查找

jrcvhitl  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(108)

我正在搜索一个字符串,它前面有几个其他字符串/字符:
这不是真实的例子,但它描述了我想要捕获的-**字符串,它出现在第二次(或第三次,表达式必须是可伸缩和可配置的)“:“字符出现之后。

boo+foo:qoo+loo:thisIsWhatIneed...

显然,以下方法行不通:

(?<=\:){2,}.*

这将与我想要的完全相反(颠倒):

.*:.*:

a9wyjsp7

a9wyjsp71#

这将符合您在示例中所需的内容:
[^:]*:[^:]*:(.*)
忽略:忽略:作为组1捕获
这将允许您指定更容易忽略的冒号分隔单词的数量:
(?:[^:]*:){2}(.*)
这将捕获最后一个冒号之后的所有内容,直到结尾,无论有多少个冒号:
:([^:]*)$

dgenwo3n

dgenwo3n2#

如果你想在:的某个固定数量之后捕获一些东西,那么沿着沿着这些行的东西是你最好的选择:

/^(?:[^:]+:){2}([^:]*)/

Demo
如果你想要在所有冒号后面的东西,比如用:分隔的某行的最后一个字段,你可以这样做:

/([^:]*$)/

Demo
在这两种情况下,你基本上是从字符串的前面或后面“计数冒号”;如果从前面,则从后面使用^$

fnatzsnv

fnatzsnv3#

为什么不先看,而不是后看?

(?<=\:)        # Match something follows a ':'
(?!            # that is not
  \w+\+\w+     # two "words" separated by a '+'
  (?::|$)      # followed by either another ':' or the end of string.
)              # 
.*             #

试试on regex101.com

djmepvbi

djmepvbi4#

  • "..出现“:“字符。**... *

在这里,捕获组将是一个合乎逻辑的方法。

:.+:(.+)

试图只匹配文本,利用一个 * 积极的look-behind*,通常需要一个固定的长度。
尽管如此,某些 *regex引擎 * 允许可变长度的 look-behind-即 JavaScript.NET
如果你使用这两种方法中的任何一种,你可以使用下面的模式。

(?<=:.*:).+
var s = 'boo+foo:qoo+loo:thisIsWhatIneed...'
console.log(s.match(/(?<=:.*:).+/))

相关问题