我需要捕获所有(英语)单词,除了缩写模式为:
"_any-word-symbols-including-dash."
(所以在开头有下划线,最后点到中间的任何字母和短划线)
我试过这样的事情:
/\b([A-Za-z-^]+)\b[^\.]/g
但我似乎并不理解如何使用否定匹配。
更新
我不仅需要匹配,而是将文字包装在某些标签中:
"一些单词_abbr-abrr。在这里"我应该得到:
<w>a</w> <w>some</w> <w>words</w> _abbr-abbr. <w>a</w> <w>here</w>
所以我需要使用正确的正则表达式替换:
test.replace(/correct regex/, '<w>$1</w>')
答案 0 :(得分:2)
Negative lookahead是(?!)
。
所以你可以使用:
/\b([^_\s]\w*(?!\.))\b/g
不幸的是,有no lookbehind in javascript,所以你不能用“_
前缀”来做类似的伎俩。
示例:
> a = "a some words _abbr. a here"
> a.replace(/\b([^_\s]\w*(?!\.))\b/g, "<w>$1</w>")
"<w>a</w> <w>some</w> <w>words</w> _abbr. <w>a</w> <w>here</w>"
关注-
的评论。更新的正则表达式是:
/\b([^_\s\-][\w\-]*(?!\.))\b/g
> "abc _abc-abc. abc".replace(/\b([^_\s\-][\w\-]*(?!\.))\b/g, "<w>$1</w>")
"<w>abc</w> _abc-abc. <w>abc</w>"