正则表达式-在单字符之前匹配单词,而不是双字符?

问题描述

|   冰岛:国家\\ n欧洲:::大陆\\ n雷克雅未克:城市 使用上面的字符串,我想匹配出现在单个冒号之前的单词,而不匹配出现在双冒号之前的单词。另外,如果在单个冒号之前有空白,我希望将其忽略并匹配空白前的单词。 因此,从上面的字符串中,我想匹配\“ Iceland \”(没有尾随空格)和\“ Reykjavik \”。 我以为创建捕获组会起作用,但是不行:
/(\\w+(?=:))(?!=::)/gm
我不知道如何在单个冒号之前忽略空格。     

解决方法

我认为您对于否定的前瞻断言只是语法有误...它是(?!pattern),而不是(?!= pattern)。 因此,请尝试:
/(\\w+(?=:))(?!::)/gm
[编辑-错过了问题的另一部分] 要忽略空格,只需将其匹配但不要捕获它。
perl -nle \'print $1 if /(\\w+)\\s*(?=:)(?!::)/gm\'
hello  ::there   :dude
...打印“有”。     ,
(\\w+)\\s*:(?!:)
看起来对您来说可能是一场胜利