,,详解正则表达式后面不要包含指定的字符串内容

,,详解正则表达式后面不要包含指定的字符串内容

本文主要介绍了关于正则表达式后不包含指定字符串内容的知识,很好,有一定的参考价值。有需要的朋友可以参考一下。

仅/abc abcbefore(?Def)。/.exec(' abcdef \ nabczz '),匹配到abcczzz,简单的固定写法,但实际使用次数几乎接近0。

很多场景写不死abc,就写成/。(?Def)。/.exec(' abcdef \ nabczz '),嗯?为什么要配上一个!从入门到放弃。

昨天(2019-04-07)随便写的/(?(?Def)) /。exec(' abcdef \ nabczz '),事实证明是对的。(?排除字符串)这个结构所能发挥的作用被误解了。难怪达不到预期,(。(?排除字符串))是正确的解决方案。

留下一个未回答的问题。每个角色演好之后可以排除什么?排除一堆长度未定的字符后怎么就不行了?预见性不会和前面的,*,{}?看结尾。

附:/(?def)。/.exec('abcdefzzz\nabczzz ')也可以写。可能就到头了。结果匹配不上,还是这样不行:/。(?def)zzz/。exec('abcdefzzz\nabczzz ').

正则表达式匹配是否在指定内容后包含指定的字符串内容:

是的:比较简单。就写这个重要的吧。

不:比实际情况复杂得多。怎么排除?

前提原则

1.表达式中内容固定的字符串,能不写就尽量不写,能写就尽量写简单(比如前面写的abc部分不能写死)

2.不需要学习就可以使用少量的前进(forward)和后退(backward)。如果你学习,你必须学习那些浏览器支持。你不敢用,用多了也学不会。

3.NoJS(不仅仅是JavaScript);不仅仅是浏览器里的JS;但是js的regular /exp/literal写的太简洁了,没有朋友(哪种语言),函数、对象、字符串都没必要;不接受反驳。

假设要匹配的文本

html raw=` 0

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=html raw . replace(/[\ r \ n]/g,' ');

//常规测试代码

(/[\s\S]*/。exec(htmlRaw)||[])[0]

不要单个字符的匹配

匹配div.matchX标记:div * * *=' * * * ' class=' * * * matchx * * * ' * * *=' * * * '

您可以直接使用[]将matchX限制为HTML标记,这意味着中的文本不能以结尾字符出现。

单个字符相当简单:

//有效

/div[^] matchX[^] /。exec(htmlRaw)[0]

如果不局限于标记,可能会匹配出界;而这种无限制,迟早会出错:

//无效

/div。matchX。/.exec(htmlNoWrap)[0]

/div[\s\S]?matchX[\s\S]?/.exec(htmlRaw)[0] //又长又丑,带换行符。

其他单角色场景应灵活运用。

不要一个字符串的匹配

匹配第一层没有excludeX文本内容的第一个div是返回包含matchX 4的div。

[]语法只能排除单个字符。如果你不想要一个字符串呢?如果写成【ABC】,则排除所有字符A、B、C;除了用预见,似乎没有其他简单的办法。

使用(。(?Excluded string))结构能达到目的,核心是在(?[^](?excludeX))*:

//有效

/div[^]*[^] div(?[^](?excludeX))*[^] \/div[^] \/div/。exec(htmlRaw)[0]

要包含字符串匹配,只需直接编写所需的字符串。比较简单,就不写这个例子了。

没研究过(。(?排除的字符串))结构。

对于.+(?!排除)不能工作的释疑

由于(?Exclude)不适用于贪婪匹配的每一个字符串,只适用于贪婪匹配的最后一个字符;意味着lookahead不能阻止最后一个字符之前所有字符的贪婪匹配。

/.(?def)。/.exec('abcdef\nabczzz ')

第一个。匹配abcde,后面是F,不是def,第二个。匹配F,这是常规的。

额外记录

/(\d)(?\.1)/.exec('123.141 ')的外观如下:

13: \ d贪婪匹配直到.

12: 123.1被发现不合规(?\.1),后退一位。

没有表达式,返回12。

/(.)(?\.1)/.exec('123.141 ')的外观如下:

13.141:贪婪匹配到底

23.141:符合(?\.1)

没有留下表达式,返回123.141。

/(.(?\.1)) /.exec('123.141 ')的外观如下:

1:匹配新的位。

1: 123符合(?\.1)

12:匹配新数字

12: 123.符合(?\.1)

13:匹配一个新的

12: 123.1被发现不合规(?\.1),后退一个位置,并退出循环。

没有表达式,返回12。

如果要展望每个角色,只有最后写的比较好理解。

总结

以上是边肖给大家介绍的正则表达式。不要在后面包含指定的字符串内容。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • word文档无法编辑是怎么回事-
  • 华为手机怎么设置返回键(华为手机下面的三个按键设置方法)
  • lumia950怎么样(Lumia950体验分享)
  • otg连接是什么意思(OTG连接手机方法)
  • 笔记本触摸板怎么右键(笔记本电脑触控板手势操作设置)
  • 真我x7怎么样(realme X7 系列体验)
  • 苹果的A16处理器有多强(苹果的A16处理器的介绍)
  • 小米互传怎么用(小米手机的连接与共享教程)
  • 怎么设置电脑桌面图标自动对齐 设置电脑桌面自动整理图标的方法
  • 宽带错误651最简单解决方法(处理宽带错误651的措施)
  • 大学生手机有什么推荐(大学生换手机攻略)
  • 天玑1100和骁龙778g哪个好(骁龙778G、天玑900、天玑1100购选建议)
  • yum update 升级报错的解决办法
  • Windows10禁用屏保教程
  • 连接wifi显示无互联网连接怎么办(无线连上了却不能上网处理绝招)
  • 留言与评论(共有 条评论)
       
    验证码: