Javascript 数字模式之间的捕获

Javascript 数字模式之间的捕获,javascript,regex,Javascript,Regex,我一直在尝试捕捉这样的结构: 1:1 wefeff qwefejä qwefjk dfjdf 10:2 jdskjdksdjö 12:1 qwe qwe: qwertyå 我想匹配数字之间的所有内容,后面是冒号,后面是另一组数字。因此,预期产出为: match 1 = 1:1 wefeff qwefejä qwefjk dfjdf match 2 = 10:2 jdskjdksdjö match 3 = 12:1 qwe qwe: qwertyå 以下是我尝试过的: \d+\:\d+.+

我一直在尝试捕捉这样的结构:

1:1 wefeff qwefejä qwefjk
dfjdf 10:2 jdskjdksdjö
12:1 qwe qwe: qwertyå
我想匹配数字之间的所有内容,后面是冒号,后面是另一组数字。因此,预期产出为:

match 1 = 1:1 wefeff qwefejä qwefjk dfjdf
match 2 = 10:2 jdskjdksdjö
match 3 = 12:1 qwe qwe: qwertyå
以下是我尝试过的:

\d+\:\d+.+
但如果单词字符跨越两行,这就失败了


我使用的是一个基于javascript的正则表达式引擎。

您可以使用或不使用ñ-ñ,但这样应该没问题

\d+?:\d+? [a-zñA-ZÑ ]*
编辑:

如果要包含打断线,可以将\n或\r添加到集合中

\d+?:\d+? [a-zñA-ZÑ\n ]*
\d+?:\d+? [a-zñA-ZÑ\r ]* 
试试看!也在

有关更多角色:
^[a-zA-Z0-9!@\$%\^\&*(+=.\-]+$

您可以基于以下内容使用正则表达式:

\d+:\d+
部分将匹配一个或多个数字、冒号、一个或多个数字,
(?:(!\d+:\d)[\s\s])*
将匹配任何字符、零或多个出现,这些字符不会开始一个或多个数字加冒号和数字的序列。请参阅

由于令牌是一种消耗资源的构造,您可以将其转换为一种更高效的模式,如

/\d+:\d+\D*(?:\d(?!\d*:\d)\D*)*/g

现在,
()
变成了线性匹配字符串的模式:

  • \D*
    -0+非数字符号
  • (?:
    -非捕获组的开始匹配零个或多个以下序列:
    • \d
      -表示
    • (?!\d*:\d)
      -后面不跟0+个数字,
      和一个数字
    • \D*
      -0+非数字符号
  • )*
    -非捕获组结束

类似于
(?s)\d+:\d+(?:(?!\d+:\d)的内容。)*
应该可以使用。
是除新行以外的任何字符,除非设置了
s
修饰符。@Wiktor Stribiżew确实可以使用!你想从中得出答案吗?如果你有时间的话,我会非常感谢你的简短解释。@Antti:我发布了regex解决方案,调整JavaScript,因为标签是在之后添加的r我的初始评论。我还添加了一个展开的正则表达式版本,无论正则表达式使用的修饰符是什么,它都可以工作。Doesnt'capture“dfjdf”现在的问题是,它在文本中的特殊字符处停止,比如:andä,我将编辑我的问题以包含一些特殊字符。您有可能存在的特殊字符的列表吗?当您必须将这些字符添加到正则表达式中时,通常使用一个集合,这是最准确的,但“短”使用的字符集:^[a-zA-Z0-9!@\$%^&*)(+=._-]+$
/\d+:\d+\D*(?:\d(?!\d*:\d)\D*)*/g