首页 > 请问一个正则表达式匹配单词的问题?

请问一个正则表达式匹配单词的问题?

类似这样字符串 "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', 可验证是否正确匹配
【热门文章】
【热门文章】