我必须在文本中找到所有以'
或"
单引号或双引号开头的所有单词(因此,如英语缩写),例如em
或bar
,< / p>
I love 'em
foo 'bar
foo 'bar?
foo 'bar.
但忽略双引号或单引号之类的单词
foo "bar"
foor 'bar'
现在,找到那些最后一个的正则表达式就像this一个
// find words in double or single quotes
/\"([^\"]+)\"|'([^']+)'|\\S+/
但是如何查找仅以'
或"
开头的单词,而忽略诸如foo
或'foo?
中的单词'foo.
等最后一个点,等等。双引号还是单引号?
答案 0 :(得分:4)
您可以将'
或"
与字符集["']
匹配。将该字符集捕获到一个组中,以便以后可以对其进行反向引用。重复单词字符,然后匹配单词边界,对第一个捕获组((?!\1)
)进行负向超前查找,确保单词结束后的下一个字符 not 不相同{{ 1}}或'
开头匹配。
"
https://regex101.com/r/d5l2ol/2
请注意,这允许使用不一致的引号,例如
(['"])\w+\b(?!\1)
(如果您不希望这样做,只需在负前瞻中重复foo "bar'
字符集,而不要使用反向引用)