Javascript 正则表达式查找唯一的单词

Javascript 正则表达式查找唯一的单词,javascript,regex,Javascript,Regex,我试图在JavaScript中解析字符串并找到所有唯一的单词,这些单词以:符号开头。为此,我编写了正则表达式: /(:[A-z]\w+)(?!.*\1)/g 此字符串可以正常工作: "test :one :one test :one test :two".match(/(:[A-z]\w+)(?!.*\1)/g) 结果是[':一',':二'] 但是,如果单词后面有新行符号 正则表达式工作不正常,返回[':一',':一',':二'] 如何修改此正则表达式并仅获得唯一结果?您需要使用[\s\s]

我试图在JavaScript中解析字符串并找到所有唯一的单词,这些单词以
符号开头。为此,我编写了正则表达式:

/(:[A-z]\w+)(?!.*\1)/g
此字符串可以正常工作:

"test :one :one test :one test :two".match(/(:[A-z]\w+)(?!.*\1)/g)
结果是
[':一',':二']

但是,如果单词后面有新行符号

正则表达式工作不正常,返回
[':一',':一',':二']


如何修改此正则表达式并仅获得唯一结果?

您需要使用
[\s\s]
而不是
,以确保检查可能会一直到字符串的末尾(不仅仅是行)和
[a-zA-Z]
而不是
[a-Z]
(请参阅):

var re=/(:[a-z]\w+(![\s\s]*\1)/gi;
var str='test:one\n:one-test:one-test:two';
console.log(str.match(re));
//或者,去掉初始值:

log(str.match(re.map)(函数(x){return x.substr(1);}))
[A-z]
vs
[A-z]
@Tushar,thx,我会修正这个以防万一:我添加了另一行代码来去除初始的
如果你需要的话。当然,可以使用内部捕获组完成,然后使用
RegExp\exec
迭代匹配,但是为什么不重用代码呢。
"test :one\n :one test :one test :two".match(/(:[A-z]\w+)(?!.*\1)/ig)
/(:[a-z]\w+)(?![\s\S]*\1)/gi