我想使用正则表达式捕获字符串中的所有内容,最后是冒号,后跟空格:
或逗号后跟空格,
,但只使用逗号作为条件如果在字符串中可以找到带空格的冒号。换句话说,如果没有:
,我不想捕捉任何东西。如果字符串中有:
,我想要抓住所有内容,直到,
,如果,
位于:
之前。
我正在尝试
/(?:(?!: )[^])*/g
和
/(?:(?!: )[^])*/g
一些示例文字:
这里我只想捕获DeBary
:
DeBary, OH: Suddenly on Thursday, June 16, 2011 at the age of 78.
这里我只想捕获DeBary
:
DeBary: Suddenly on Thursday, June 16, 2011 at the age of 78.
在这里,我想什么都不捕捉:
Suddenly on Thursday, June 16, 2011 at the age of 78.
答案 0 :(得分:1)
如上所述,如果你想捕获匹配的子字符串,那么你需要一个捕获,而不是一个非捕获组,其中包含量词+
小组:
^([^,:]+)(?=.*?:)
答案 1 :(得分:0)
你可以通过前瞻来做到这一点:
^(?:[^,:])+(?=.*?:)
(?:[^,:])+
捕获一系列不是逗号或冒号的字符。
(?=.*?:)
要求此匹配后跟任何任何字符,然后在某处冒号。
答案 2 :(得分:0)
这可能有用。
# (?s)^(?=.*:[ ]).*?(?=[,:][ ])
(?s) # Dot-all modifier
^ # BOS
(?= .* : [ ] ) # Lookahead for colon then space
.*? # Consume minimal any chars up until
(?= [,:] [ ] ) # Lookahead, Comma or colon, then whitespace
或者,它可以在没有最终前瞻的情况下完成。
# (?s)^(?=.*:[ ])[^,:]*
(?s) # Dot-all modifier
^ # BOS
(?= .* : [ ] ) # Lookahead for colon then space
[^,:]* # Consume non comma nor colon
答案 3 :(得分:0)
答案 4 :(得分:0)
你可以不用前瞻地做到这一点:
^(.*?)(?:, .*: |: )
这假设实现给出了最左边的替换优先级,大多数都是。