关于javascript的python正则表达式式

关于正则表达式中\b的认识
原创
 11:11:24
553
\b用来设置单词界限。匹配单词(由字母数字或下划线组成的)的开始或结束(匹配开始时,单词之前不能有\w;匹配结束时,单词之后不能有\w)。写在表达式某个字符或字符串之前,表示此字符或字符串之前不能有\w对应的字符;写在字符后面,表示此字符之后不能有\w对应的字符。 所以\b可以只有一个放在字符前面或后面,也可以有2个(表示字符前后都不能有\w对应的字符)。先看正确的情况 图1注:1.如果\b描述的不是由字母数字或下划线组成的单词,则表达式定义错误,永远不会有字符串与其匹配。如图2:图22.目标字符串中匹配的只是单独的单词,不包括前后的间隔(如空格,\W等),图1中匹配的“Russell”字符两边的空格,没有计入(测试工具显示没有蓝色背景填充)。目的:匹配独立的单词或字符串的部分,业务规则是查找所有有单词“Russell”独立出现的地方。如表达式\bRussell\b
则Russell123abc不匹配,因为Russell后不应该跟字母或数字或下划线,Russell 123abc,Russell@123abc都匹配。3.特殊情况。自相矛盾的表达式定义。\b只是用来限定由字母数字或下划线构成的单词,如果表达式\b之后还有其他表达式,则表达式\b之后的表达式一定不能是\w或者不能是\w中的内容,因为例子,表达式\bhi\bnihao,意思是单词hi前后不能有\w的内容,并且要求目标字符串有hi,并且hi之后紧跟&nihao&字符。即这个表达式的定义就是自相矛盾的。因为:根据\b的定义,\b只是确保下列情况,目标字符串才能匹配:\b前后的字符不能有\w,所以非\w(或者说\W)的字符在\b前后会匹配上。注意,这里要求要想匹配上一定是非\w的字符,所以正则的潜台词已经说了:匹配上\b的字符身边一定就是非\w字符了,所以要在\b表达式之后再加上非\w的其他表达式,才有可能让目标字符串匹配上。所以类似这样的正则永远不会被匹配:\bhi\bnihao
目标字符串hinihao
hi @#$nihao
。。。因为\bhi\b要求了hi前后不能有字母数字或下划线的字符,并且hi之后紧接着要是nihao字符串。所以hi前后这能是空格!@#¥%等特殊字符,而表达式中定义紧接着hi之后的是nihao,所以永远都不会有目标字符串和此正则匹配。办法:在定义正则时,就把这个非\w用正则考虑进去(写进表达式中),修改正则为\bhi\b\W+nihao 则有hinihao hi nihao hi@nihao hi!@#$ nihao后三个都匹配以上就是关于正则表达式中\b的认识的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(110038)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(107851)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(82848)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(82078)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(79241)
全栈工程师
文章总浏览数
相关视频章节JS使用正则表达式实现关键字替换加粗功能示例
转载 &更新时间:日 11:53:20 & 作者:Quber
这篇文章主要介绍了JS使用正则表达式实现关键字替换加粗功能,涉及javascript基本正则匹配与替换操作相关技巧,需要的朋友可以参考下
本文实例讲述了JS使用正则表达式实现关键字替换加粗功能的方法。分享给大家供大家参考,具体如下:
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&
&title&正则替换&/title&
&script type="text/javascript"&
var str = "使用正则表达式把关键字替换加粗,文字加粗";
var word = "加粗";
str = str.replace(new RegExp("(" + word + ")","ig"), "&strong&" + word + "&/strong&");
document.write(str);
运行效果截图如下:
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
正则表达式在线生成工具:
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具JavaScript种正则表达式有两种定义方式,定义一个匹配类似 &%XXX%& 的字符串
1. 构造函数
var reg=new RegExp('&%[^%&]+%&','g');
var reg=/&%[^%&]%&/g;
g:&global,全文搜索,默认搜索到第一个结果接停止
i:&ingore case,忽略大小写,默认大小写敏感
m:&multiple lines,多行搜索(更改^ 和$的含义,使它们分别在任意一行对待行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配)
正则表达式让人望而却步以一个重要原因就是其转义字符太多了,组合非常之多,但是正则表达式的元字符(在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符)并不多
元字符:( [ { \ ^ $ | ) ? * + .
并不是每个元字符都有其特定意义,在不同的组合中元字符有不同的意义,分类看一下
预定义特殊字符
水平制表符
与X对应的控制字符(Ctrl+X)
垂直制表符
一般情况下正则表达式一个字符(转义字符算一个)对应字符串一个字符,表达式 ab\t 的含义是
但是我们可以使用元字符[]来构建一个简单的类,所谓类是指,符合某些特征的对象,是一个泛指,而不是特指某个字符了,我们可以使用表达式 [abc] 把字符a或b或c归为一类,表达式可以匹配这类的字符
元字符[]组合可以创建一个类,我们还可以使用元字符^创建反向类/负向类,反向类的意思是不属于XXX类的内容,表达式 [^abc] 表示不是字符a或b或c的内容
按照上面的说明要是我们希望匹配单个数字那么表达式是这样的
如果是字母那么。。。,好麻烦,正则表达式还提供了范围类,我们可以使用 x-y来连接两个字符表示从x到y的任意字符,这是个闭区间,也就是说包含x和ybenshen,这样匹配小写字母就很简单了
要是想匹配所有字母呢?在[]组成的类内部是可以连写的,我们还可以这样写&[a-zA-Z]
刚才使用正则我们创建了几个类,来表示数字,字母等,但这样写也很是麻烦,正则表达式为我们提供了几个常用的预定义类来匹配常见的字符
除了回车符和换行符之外的所有字符
非数字字符
[ \t\n\x0B\f\r]
[^ \t\n\x0B\f\r]
[a-zA-Z_0-9]
单词字符(字母、数字、下划线)
[^a-zA-Z_0-9]
非单词字符
有了这些预定义类,写一些正则就很方便了,比如我们希望匹配一个 ab+数字+任意字符 的字符串,就可以这样写了 ab\d.
正则表达式还提供了几个常用的边界匹配字符
单词边界,指[a-zA-Z_0-9]之外的字符
非单词边界
看个不负责任的邮箱正则匹配(切勿模仿,小括号后面会讲到)&\w+@\w+\.(com)$
之前我们介绍的方法都是一一匹配的,如果我们希望匹配一个连续出现20次数字的字符串难道我们需要写成这样
\d\d\d\d...
为此正则表达式引入了一些量词
出现零次或一次(最多出现一次)
出现一次或多次(至少出现一次)
出现零次或多次(任意次)
出现n到m次
至少出现n次
看几个使用量词的例子
\w+\b Byron 匹配 单词+边界+Byron
(/\w+\b Byron/).test('Hi Byron'); //true
(/\w+\b Byron/).test('Welcome Byron'); //true
(/\w+\b Byron/).test('HiByron'); //false
&\d+\.\d{1,3} 匹配三位小数的数字
&贪婪模式与非贪婪模式
看了上面介绍的量词,也许爱思考的同学会想到关于匹配原则的一些问题,比如{3,5}这个量词,要是在句子种出现了十次,那么他是每次匹配三个还是五个,反正3、4、5都满足3~5的条件,量词在默认下是尽可能多的匹配的,也就是大家常说的贪婪模式
''.match(/\d{3,5}/g); //["12345", "6789"]
&既然有贪婪模式,那么肯定会有非贪婪模式,让正则表达式尽可能少的匹配,也就是说一旦成功匹配不不再继续尝试,做法很简单,在量词后加上 ? 即可
''.match(/\d{3,5}?/g); //["123", "456", "789"]
有时候我们希望使用量词的时候匹配多个字符,而不是像上面例子只是匹配一个,比如希望匹配Byron出现20次的字符串,我们如果写成&Byron{20} 的话匹配的是Byro+n出现20次,怎么把Byron作为一个整体呢?使用()就可以达到次目的,我们称为分组
(Byron){20}
&如果希望匹配Byron或Casper出现20次该怎么办呢?可以使用字符 | 达到或的功效
(Byron|Casper){20}
&我们看到图中有个#1的东东,那是什么?使用分组的正则表达式会把匹配项也放到分组中,默认就是按数字编号分发的,各异根据编号获得捕获的分组内容,这个在一些希望具体操作第几个匹配项的函数中很有用
(Byron).(ok)
如果有分组嵌套的情况,外面的组的编号靠前
((^|%&)[^\t]*)
有时候我们不希望捕获某些分组,只需要在分组内加上 ?: 就可以了,着并不意味着该分组内容不属于正则表达式,只是不会给这个分组加编号了而已
(?:Byron).(ok)
&其实在C#等语言中分组还可以起名字,不过JavaScript不支持
exp1(?=exp2)
匹配后面是exp2的exp1
exp1(?!exp2)
匹配后面不是exp2的exp1
说的有些抽象,看个例子&good(?=Byron)
(/good(?=Byron)/).exec('goodByron123'); //['good']
(/good(?=Byron)/).exec('goodCasper123'); //null
(/bad(?=Byron)/).exec('goodCasper123');//null
通过上面例子可以看出 exp1(?=exp2) 表达式会匹配exp1表达式,但只有其后面内容是exp2的时候才会匹配,也就是两个条件,exp1(?!exp2) 比较类似
good(?!Byron)
(/good(?!Byron)/).exec('goodByron123'); //null
(/good(?!Byron)/).exec('goodCasper123'); //['good']
(/bad(?!Byron)/).exec('goodCasper123');//null
PS:博客中的图都是用第二个链接做的,帮助人图形化理解正则表达式,真心不错
阅读(...) 评论()关于javascript正则表达式的使用请参考我的这篇博客
为了更高效的使用正则表达式, 首先要理解它的工作原理. 下面是一个正则表达式处理的基本步骤.
第一步: 编译
当你创建了一个正则表达式对象(使用正则直接量或RegExp构造函数), 浏览器会验证你的表达式, 然后把它转化为一个原生代码程序, 用于执行匹配工作. 如果你把正则对象赋值给一个变量, 可以避免重复执行这一步骤.
第二步: 设置起始位置
当正则类进入使用状态, 首先要确定目标字符串的起始搜索位置. 它是字符串的起始字符, 或者由正则表达式的lastIndex属性指定, 但是当它从第四步返回到这里时(由于尝试匹配失败), 此位置则在最后一次匹配的起始位置的下一个字符的位置上.
浏览器厂商优化正则表达式引擎的办法是, 通过提前决定跳过一些不必要的步骤, 来避免大量无意义的工作. 举个例子, 如果正则表达式由^开始, IE和Chrome通常会判断字符串的起始位置能否匹配, 如果匹配失败, 那么可以避免愚蠢地搜索后续位置. 另一个例子是匹配第三个字母是x的字符串, 一个聪明的做法是先找到x, 然后再将起始位置回退两个字符
第三步: 匹配每个正则表达式字元
一旦正则表达式知道开始位置, 它会逐个检查文本和正则表达式模式. 当一个特定的字元匹配失败时, 正则表达式会试着回溯到之前尝试匹配的位置上, 然后尝试其他可能的路径
第四步: 匹配成功或失败
如果在字符串当前位置发现了一个完全匹配, 那么正则表达式宣布匹配成功. 如果正则表达式所有的可能路径都没有匹配到, 正则表达式引擎会回退到第二步, 然后从下一个字符重新尝试. 当字符串的每一个字符(以及最后一个字符串后面的位置)都经历这个过程, 如果还没有成功匹配, 那么正则表达式就会宣布彻底匹配失败
当正则表达式匹配目标字符串时, 它从左到右逐个测试表达式的组成部分, 看是否能找到匹配项. 在遇到量词和分支时, 需要决策下一步如何处理. 如果遇到量词(诸如 *,+?或{2, }),
正则表达式需决定何时尝试匹配更多字符; 如果遇到分支(来自|操作符)那么必须从可选项中选择一个尝试匹配.
每当正则表达式做类似的决定时, 如果有必要的话, 都会记录其他选择, 以备返回时使用. 如果当前选项匹配成功, 正则表达式继续扫描表达式, 如果其他部分也匹配成功, 那么匹配结束. 但是如果当前选项找不到匹配值, 或后面的部分匹配失败, 那么正则表达式会回溯到最后一个决策点, 然后在剩下的选项中选择一个. 这个过程会一直进行, 直到找到匹配项, 或者正则表达式中量词和分支选项的所以排列组合都尝试失败, 那么它将放弃匹配, 转而移动到字符串中的下一个字符, 再重复此过程.
下面这个例子来源于”高性能JavaScript”中”重复与回溯”一节, 可以很好的理解回溯
var str = "&Para 1.&" +
" src='1.jpg'&" +
"&para 2.&" +
/&.*/p&/i.test(str);//method 1
/&.*?/p&/i.test(str);//method 2
JavaScript强化教程——正则表达式回溯
本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 ——
正则表达式回溯
下面的例子演示了处理正则表达式分之的过程:
/h(ello...
前几天有小伙伴来求救说页面上有一个 input 框,随着用户不断输入内容,页面响应会越来越慢直到完全失去响应。
简单沟通过后得知具体场景是这样的:
input 框中允许用户输入一连串逗号分...
正则表达式的引擎分析
正则表达式的引擎有两个特点:
1.默认情况下都是贪婪匹配。
2.引擎总是着急的,会返回最先匹配到结果
正则引擎的工作原理举例:
当把cat应用到“He ca...
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦匹配这些模式的部分,就可以对它们进行处理。正则表达式提供了一种完...
最近项目上在做Fortify安全漏洞扫描。其中有一项漏洞扫描规则为:Denial of Service: Regular Expression。是由于正则表达式带来的DOS攻击。
正则表达式知识详解系列,通过代码示例来说明正则表达式知识
源代码下载地址:http://download.csdn.net/detail/gnail_oug/9504094
示例功能:
正则表达式-如何匹配一对符号内的内容
摘要:以引号&&为例来介绍如何使用正则匹配。
import java.util.regex.M
import java.util.regex.P...
精通正则表达式六:匹配优先与忽略优先
定义匹配优先:尽可能多的匹配
忽略优先:尽可能少的匹配
我们刚开始接触的都是匹配优先:* + ?{num,num}忽略优先只需要在原本的匹配优先量词后加一个问号即可:*? +? ?? {num,n...
正则表达式-位置匹配(三)
有时候我们希望不光能匹配我们想要的字符串,还希望可以对位置进行匹配。比如希望找到单个字母a,而不希望找到相关以a为开头的单词,如abundant。此时就需要使用位置匹配,下面我们来介绍最简单的位置匹配...
JS正则表达式完整教程(略长)
转自:https://juejin.im/post/5da6c
亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣。
想必你也了解正则...
没有更多推荐了,

我要回帖

更多关于 正则表达式语法大全 的文章

 

随机推荐