我正在搜索一个字符串,它前面有几个其他字符串/字符:这不是真实的例子,但它描述了我想要捕获的-**字符串,它出现在第二次(或第三次,表达式必须是可伸缩和可配置的)“:“字符出现之后。
boo+foo:qoo+loo:thisIsWhatIneed...
显然,以下方法行不通:
(?<=\:){2,}.*
这将与我想要的完全相反(颠倒):
.*:.*:
a9wyjsp71#
这将符合您在示例中所需的内容:[^:]*:[^:]*:(.*)忽略:忽略:作为组1捕获这将允许您指定更容易忽略的冒号分隔单词的数量:(?:[^:]*:){2}(.*)这将捕获最后一个冒号之后的所有内容,直到结尾,无论有多少个冒号::([^:]*)$
[^:]*:[^:]*:(.*)
(?:[^:]*:){2}(.*)
:([^:]*)$
dgenwo3n2#
如果你想在:的某个固定数量之后捕获一些东西,那么沿着沿着这些行的东西是你最好的选择:
:
/^(?:[^:]+:){2}([^:]*)/
Demo如果你想要在所有冒号后面的东西,比如用:分隔的某行的最后一个字段,你可以这样做:
/([^:]*$)/
Demo在这两种情况下,你基本上是从字符串的前面或后面“计数冒号”;如果从前面,则从后面使用^和$。
^
$
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。
djmepvbi4#
在这里,捕获组将是一个合乎逻辑的方法。
:.+:(.+)
试图只匹配文本,利用一个 * 积极的look-behind*,通常需要一个固定的长度。尽管如此,某些 *regex引擎 * 允许可变长度的 look-behind-即 JavaScript 和 .NET。如果你使用这两种方法中的任何一种,你可以使用下面的模式。
(?<=:.*:).+
var s = 'boo+foo:qoo+loo:thisIsWhatIneed...' console.log(s.match(/(?<=:.*:).+/))
4条答案
按热度按时间a9wyjsp71#
这将符合您在示例中所需的内容:
[^:]*:[^:]*:(.*)
忽略:忽略:作为组1捕获
这将允许您指定更容易忽略的冒号分隔单词的数量:
(?:[^:]*:){2}(.*)
这将捕获最后一个冒号之后的所有内容,直到结尾,无论有多少个冒号:
:([^:]*)$
dgenwo3n2#
如果你想在
:
的某个固定数量之后捕获一些东西,那么沿着沿着这些行的东西是你最好的选择:Demo
如果你想要在所有冒号后面的东西,比如用
:
分隔的某行的最后一个字段,你可以这样做:Demo
在这两种情况下,你基本上是从字符串的前面或后面“计数冒号”;如果从前面,则从后面使用
^
和$
。fnatzsnv3#
为什么不先看,而不是后看?
试试on regex101.com。
djmepvbi4#
在这里,捕获组将是一个合乎逻辑的方法。
试图只匹配文本,利用一个 * 积极的look-behind*,通常需要一个固定的长度。
尽管如此,某些 *regex引擎 * 允许可变长度的 look-behind-即 JavaScript 和 .NET。
如果你使用这两种方法中的任何一种,你可以使用下面的模式。