一、正则表达式匹配“非”

正则表达式的“非”代表不想匹配某个字符。

例如对于字符串 helloword123,表达式为/[^0-9]+/g 时可以匹配非数字,匹配结果为 helloword,表达式为 /[^he]+/g 可以匹配非h非e的字符,匹配结果为 lloword123;

二、正则表达式匹配“非”字符串的匹配

[^]内的多个字符串是“或”的关系存在的,即它们并不是一个整体,如果想匹配“hello”,写成[^hello][^(hello)]都是不行的,这时就需要用到正则表达式的断言——(?!pattern)零宽负向先行断言或者(?<!pattern)零宽负向后行断言均可。

正则表达式为:/^((?!hello).)+$/

由于断言(?!hello)是不占位的,后跟的.在原位置匹配任意字符,再用括号将其括起来,用+重复一次或多次,前后加上^和$,若是字符串中存在hello,则匹配到h字符之前的时候,断言(?!hello)匹配失败,正则匹配结果为false,若是字符串中不存在hello,则匹配结果就是整个字符串。

三、用法示例

1、匹配&和;之间不含有test的字符
  str = "hello &test1;test&qout;";
  正则表达式: /&((?!test).)+;/g
  匹配结果: 和&qout;
2、匹配不含有<img>标签的<div></div>标签
  str = "<div id='1'><img class='xx'></div><div id='2'><input type='text'></div>";
  正则表达式: /<div[^>]*>((?!<img[^>]*>).)+</div>/g
  匹配结果: <div id='2'><input type='text'></div>
3、匹配由字母或数字或下划线或汉字组成的字符串,但字符串中不能出现xyz
  str = "abc";
  正则表达式: \b((?!xyz)\w)+\b  #\b为匹配单词的开始或结束
  匹配结果:abc
4、匹配非www开头的二级域名
  str = "test.gaosumei.com";
  正则表达式: /((?!www)[a-z]+\.gaosumei\.com)/
  匹配结果:test.gaosumei.com

四、测试地址

最后修改日期:2019年10月11日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。