捕获不带符号的单词

时间:2013-07-11 05:56:12

标签: javascript regex

我需要捕获所有(英语)单词,除了缩写模式为:

"_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>')

1 个答案:

答案 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>"