如何在分隔之间选择多个单词

时间:2016-02-24 15:02:06

标签: javascript regex

我的大脑过热了。您是否知道如何在javascript中使用Regexp在以下文本中选择 :words to select

Begin :word1 word2: free text :word: :words to select :done:

我的实际正则表达式是:

/\B:([\-+\w]*)$/g

每个字词都以:wordexample::multiple words:之类的冒号分隔,我只希望以冒号开头,而不是以:结尾 因此,困难在于排除结肠所包围的良好术语......

我正在处理一个包含多个单词的textcomplete,并且在选择多个单词方面存在问题。

2 个答案:

答案 0 :(得分:0)

这是我能得到的最接近的:

/(?::)((\b\w+\b(?!:)) )+(?::)/g

请参阅http://refiddle.com/refiddles/56cdd1e575622d69564c2e00

答案 1 :(得分:0)

我认为这样可行:/:\S[^:]*(?=\s:|$)/g

Regex101可以比我更好地解释它:https://regex101.com/r/fA2vP9/2

  

:匹配字符:字面意思

     

\ S匹配任何非空格字符[^ \ r \ n \ t \ f]

     

[^:] *匹配零个或多个单个字符而不是文字字符:

     

(?= \ s:| $)正向前瞻 - 断言任何空白字符[\ r \ n \ t \ f]后跟字符:在字符串末尾字面或断言位置

     

g修饰符:全局。所有比赛(首场比赛时不返回)

将以下字符串与.match(/:\S[^:]*(?=\s:|$)/g)一起使用,可获得以下输出:

示例1

"Begin :word1 word2: free text :word: :words to select :done:"
output> [":words to select"]

示例2

"Begin :word1 word2: free text :word: :words to select :done: :test :test:"
output> [":words to select", ":test"]

示例3

"Begin :word1 word2: :i :free: text :word:"
output> [":i"]

示例4

"Begin :word1 word2: free text :word"
output> [":word"]