正则表达式匹配所有字符实例,除非后跟数字或单独

Posted

技术标签:

【中文标题】正则表达式匹配所有字符实例,除非后跟数字或单独【英文标题】:Regex match all instances of character except when followed by a digit or is by itself 【发布时间】:2019-05-16 23:43:06 【问题描述】:

尝试匹配@ 的每个实例,除非后面跟digit 或单独在js 中。

@(?!\d) 查找digit 后面的所有内容

1@ @1 1 j@ @j @j1 1j@ j1 1j @@1 @


Regex demo

有什么想法吗?谢谢

【问题讨论】:

@(?!\d) 匹配不带数字的@s 也许这个@(?!\d|@) 我无法弄清楚如何将 @(?!\d) 规则与附加规则结合起来,使其本身也不匹配 @ 的任何实例 你要替换火柴吗?用什么?预期的结果是什么? 试试s.replace(/((?:^|\s)@)(?!\S)|@(?!\d)/g, '$1'),见regex101.com/r/GEz9kU/1 【参考方案1】:

您想删除任何没有用空格括起来且后面没有数字的@。最简单的方法是匹配并捕获用空格括起来的@,并匹配所有其他不带数字的@,并替换为Group 1 占位符$1

s.replace(/((?:^|\s)@)(?!\S)|@(?!\d)/g, '$1')

见regex demo

详情

((?:^|\s)@)(?!\S) - 第 1 组:字符串开头或空格 ((?:^|\s)),然后是 @,后面不跟非空格字符 ((?!\S),等于 (?=\s|$),空格或字符串结尾) | - 或 @(?!\d) - @ 后面没有数字((?!\d) 是负前瞻,如果紧挨当前位置的右侧有数字,则匹配失败)

【讨论】:

以上是关于正则表达式匹配所有字符实例,除非后跟数字或单独的主要内容,如果未能解决你的问题,请参考以下文章

带有 0 或 1 的正则表达式数字 - 后跟数字

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

将字母和数字匹配在一起或仅匹配字母的正则表达式

捕获从“ NE”开始的正则表达式,后跟61到71之间的任何一位或两位数字

关于grep后跟多个正则查询条件的问题

正则表达式匹配除 5 之外的所有数字字符