类似这样字符串 "abc abcdef abc abc abc-def def-abc def-abc-def"
希望匹配出所有的独立的单词 abc,但不要包含空格,也排除abc-def等有连字符等情况
\babc\b
就可以了,\b
表示单词边界
let reg = /\babc\b/g;
reg.exec('abc abcdef abc abc abc-def def-abc def-abc-def')
=====================
不好意思,试了一下发现不行,因为-也算单词边界
应该改成这样(?<=\s|^)abc(?=\s|$)
但是如果是javascript的话,因为js不支持回顾零宽断言((?<=)
和(?<!)
),所以建议的方法是先用空格把输入split,然后匹配^abc$
let arr = 'abc abcdef abc abc abc-def def-abc def-abc-def'.split(' ');
for (let s of arr) {
if (s.match(/^abc$/)) {
console.log(s);
}
}
同意以上答案, 已点赞.
验证
至少在Ruby
中/(?<=\s|^)abc(?=\s|$)/
可以原样写.
不过, Ruby
中没必要循环匹配.
str = "abc abcdef abc abc abc-def def-abc def-abc-def"
pat = /(?<=\s|^)abc(?=\s|$)/
str.scan(pat) #=> 返回所有匹配的字串数组
str.gsub(pat, 'xxx') #=> 将匹配的字串替换为'xxx', 可验证是否正确匹配