我尝试在JavaScript中解析字符串并找到所有以:
符号开头的唯一字词。我为此目的编写了正则表达式:
/(:[A-z]\w+)(?!.*\1)/g
它适用于此字符串:
"test :one :one test :one test :two".match(/(:[A-z]\w+)(?!.*\1)/g)
结果是[':one', ':two']
Online example #1
但是,如果单词后面的新行符号
"test :one\n :one test :one test :two".match(/(:[A-z]\w+)(?!.*\1)/ig)
正则表达式无法正常工作并返回[':one', ':one', ':two']
Online example #2
如何修改此正则表达式并获得唯一的结果?
答案 0 :(得分:3)
您需要使用[\s\S]
而不是.
来确保检查可能会一直到 string (不仅仅是行)和{{1}的结尾而不是[a-zA-Z]
(请参阅Why is this regex allowing a caret?):
[A-z]
请参阅regex demo
/(:[a-z]\w+)(?![\s\S]*\1)/gi