以前只会/<abc("<abcdef>\n<abczzz>"),匹配到<abczzz>,这种简单的固定写法,但实际使用次数几乎趋近于0。

很多场景不能写死abc,顺理成章的就写成了/<.+("<abcdef>\n<abczzz>"),咦?咋把前面的匹配到了!从入门到放弃。

昨天(2019-04-07)随手写了一下/<("<abcdef>\n<abczzz>"),原来是对.+("<abcdefzzz>\n<abczzz>")写法也可以。可能是结尾的.+导致的不能匹配,但这样写还是不行:/<.+("<abcdefzzz>\n<abczzz>")。

正则表达式匹配指定内容后面要或不要包含指定的字符串内容:

"color: #ff0000">前提原则

1.表达式内固定内容的字符串能不写尽量不写,能简写的尽量简化来写(如前面写的abc部分不能写死)
2.可以少量使用前瞻(正向),后瞻(反向)基本不学,学了还要研究那些浏览器支持,不敢用,太多了也学不动。
3.NoJS(Not Only JavaScript);不仅仅是浏览器中的js;不过js的正则/exp/字面量写法简洁到没盆友(哪个语言),函数、对象、字符串统统不需要;不接受反驳。

假设待匹配的文本

htmlRaw=`
<div ***="***
  ***" class="***" ***="***">
  class=" matchX 1"
  <div ***="***
    ***" class="*** matchX ***" ***="*** excludeX ***">
    class=" matchX 2"
  </div>
  class=" matchX 3"
</div>

<div ***="***
  ***" class="***" ***="***">
  class=" matchX 4"
  <div ***="***
    ***" class="*** ***" ***="***">
    class=" matchX 5"
  </div>
  class=" matchX 6"
</div>

......
`;
//注: *** 不是固定内容,但不会出现未转义的xml实体、matchX、excludeX
//注: class=" matchX 123456"纯文本只做演示干扰之用,不应当作为特征

//如果数据对换行不敏感,应优先转换成没有换行的,大概率可以简化正则逻辑
htmlNoWrap=htmlRaw.replace(/[\r\n]+/g," ");

//正则测试代码
(/[\s\S]*/.exec(htmlRaw)||[])[0]

不要单个字符的匹配

匹配出div.matchX标签:<div ***="*** ***" class="*** matchX ***" ***="***">

可以直接使用 [^>]把matchX限定在<> HTML标记内,意思就是<>中的文本不要出现结尾的>字符。

单个字符还算简单:

//有效
/<div[^>]+matchX[^>]+>/.exec(htmlRaw)[0]

如果不限定在<>标记内,可能会匹配出界;并且这种不限定,迟早会出乱子:

//无效
/<div.+"color: #ff0000">不要一个字符串的匹配

匹配出第一层不带excludeX文本内容的第一块div,就是返回包含matchX 4的那块div

[^]语法只能排除掉单个字符,不要一个字符串咋办?硬是要写成[^abc],会把a、b、c字符全部排除掉;除了使用前瞻,好像还没有别的简单办法。

使用本文开头的(.("htmlcode">

//有效
/<div[^>]*>[^<]+<div("color: #ff0000">对于.+("htmlcode">
/<.+("<abcdef>\n<abczzz>")

第一个 .+ 匹配到了 abcde,之后是 f,不是 def,第二个 .+ 匹配 f,符合正则

额外记录

/(\d+)("123.141") 目测是这样的:
> 123:\d+贪婪匹配到.为止
> 12:发现 123.1 不符合("123.141") 目测是这样的:
> 123.141:.+贪婪匹配到结尾
> 123.141 : 符合("123.141") 目测是这样的:
> 1:.匹配到新的一位
> 1:123 符合("color: #ff0000">总结

以上所述是小编给大家介绍的正则表达式后面不要包含指定的字符串内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。