JavaScript正则:匹配Jack相关内容并排除带逗号的Jack,
问题:匹配包含Jack的内容但排除带逗号的Jack,
现有字符串:
const text = 'A Jack# Jack#aNyWord Jack, Jack';
需求:匹配所有包含Jack的内容,但需排除带逗号的Jack,,同时要匹配Jack#、Jack#aNyWord以及单独的Jack。
之前的尝试及问题
使用以下正则代码:
const text = 'A Jack# Jack#aNyWord Jack, Jack'; const regexpWords = /Jack(?=,|#)/g; console.log(text.match(regexpWords));
得到结果:Array ["Jack", "Jack", "Jack"],但期望输出为:Array ["Jack#", "Jack#aNyWord", "Jack", "Jack"]。
解决方案
可以使用以下正则表达式来实现需求:
const text = 'A Jack# Jack#aNyWord Jack, Jack'; const regexpWords = /\bJack(?!,)(?:#\S*)?/g; console.log(text.match(regexpWords)); // 输出:["Jack#", "Jack#aNyWord", "Jack"] // 注:原字符串中仅存在3个符合要求的匹配项,若需得到4个结果需确保原字符串包含两个独立的`Jack`
正则表达式说明
\b:单词边界,确保匹配完整的Jack,避免匹配类似XJack这类包含Jack但非独立开头的字符串Jack:匹配目标核心字符串(?!,):正向否定预查,确保Jack后紧跟的不是逗号,直接排除Jack,的情况(?:#\S*)?:非捕获可选组,匹配Jack后可能存在的内容:#:匹配#符号\S*:匹配任意数量的非空白字符,覆盖#aNyWord这类后续内容?:表示该组为可选,确保单独的Jack也能被匹配
g:全局匹配标志,遍历整个字符串找出所有符合条件的内容
内容的提问来源于stack exchange,提问作者Ade
相关产品推荐
相关产品推荐

