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

zc0qhyus  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(116)

我的大脑过热了。你有没有一个想法,我如何选择**:words to select**在这些下面的文本与一个正则表达式在javascript?

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

我的正则表达式是:

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

每个术语都由冒号分隔,如:wordexample::multiple words:,我只希望单词以冒号开头,而不是以:结尾。
我正在处理一个包含多个单词的textcomplete,并且在选择多个单词时遇到了问题。

wwodge7n

wwodge7n1#

我想这会起作用:/:\S[^:]*(?=\s:|$)/g
Regex 101可以比我更好地解释它:https://regex101.com/r/fA2vP9/2
:匹配字符:字面上
\S匹配任何非空格字符[^\r\n\t\f ]
[^:]* 匹配零个或多个不是原义字符的单个字符:
(?=\s:|$)Positive Lookahead -Assert任何白色字符[\r\n\t\f ],后跟以下字符:字符串末尾的位置
g修饰符:全局。所有匹配(第一次匹配时不返回)
将以下字符串与.match(/:\S[^:]*(?=\s:|$)/g)一起使用,可以得到以下输出:

示例1

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

示例二

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

示例三

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

示例四

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

brvekthn2#

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

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

相关问题