前向后瞻正则表达式及其JS例子

定义

x(?=y) 匹配‘x‘仅仅当‘x‘后面跟着‘y‘.这种叫做正向肯定查找。

比如,/Jack(?=Sprat)/会匹配到‘Jack‘仅仅当它后面跟着‘Sprat‘。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着‘Sprat‘或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

x(?!y) 匹配‘x‘仅仅当‘x‘后面不跟着‘y‘,这个叫做正向否定查找。

比如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’

form https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

见 http://www.cnblogs.com/dolphinx/p/3486214.html 解释的比较好懂。

例子

<html>
<head>
</head>
<body>
    <input id="test" type="text" value="" />
    <input id="test" type="text" value="" />
    <input id="test" type="text" value="" />
    <input id="test" type="text" value="" />
    <input id="test" type="text" value="" />
    <script>
    var testStr = "windows 95"

    /* 1 - 不带子表达式匹配 */
    var testReg = /^windows .*$/
    var result = testStr.match(testReg);
    console.log("/^windows .*$/="+result) // /^windows .*$/=windows 95

    /* 2 - 带子表达式匹配 */
    var testReg = /^windows (.*)$/
    var result = testStr.match(testReg);
    console.log("/^windows (.*)$/="+result) // /^windows (.*)$/=windows 95,95

    /* 3 - 带子表达式,不记录其匹配结果 */
    var testReg = /^windows (?:.*)$/
    var result = testStr.match(testReg);
    console.log("/^windows (?:.*)$/="+result) // /^windows (?:.*)$/=windows 95

    /* 4 - 前瞻匹配,匹配位置,正匹配 */
    var testReg = /^windows (?=95)95$/
    var result = testStr.match(testReg);
    console.log("/^windows (?=.*)$/="+result) // /^windows (?=.*)$/=windows 95

    /* 5 - 前瞻匹配,匹配位置,负匹配 */
    var testStr = "windows me"
    var testReg = /^windows (?!95)me$/
    var result = testStr.match(testReg);
    console.log("/^windows (?!\d*)$/="+result) // /^windows (?!d*)$/=windows me

    </script>
</body>
</html>
时间: 2024-11-11 22:13:58

前向后瞻正则表达式及其JS例子的相关文章

js 获取当前日期或者前、后N天yyyy-MM-dd的方法

//js获取当前日期.当前日期前.后N天的标准年月日 //day=0为当前天,day=7为前7天,day=-7为当前日期的后7天 function getstartdate(day) {            var beginDate;            var curr_time = new Date();            var week_time = new Date(curr_time.getTime() - 1000 * 60 * 60 * 24 * day);      

隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在隐马尔科夫模型HMM(一)HMM模型中,我们讲到了HMM模型的基础知识和HMM的三个基本问题,本篇我们就关注于HMM第一个基本问题的解决方法,即已知模型和观测序列,求观测序列出现的概率. 1. 回顾HMM问题一:求观测序列的概率 首先我们回顾下HMM模型的问题一.这个

非递归前中后序遍历二叉树

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 写在前面: 最近准备找工作,捡起原来学习过的各种知识,加上一些自己的理解,梳理一下流程,巩固自己的认识,一步两步,一步两步... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 二叉树的遍历是树操作的基础,一般的前中后序递归遍历比较简单,这里就不列出了,主要是非递归实

Ajax中主页加载分页面后,分页面js脚本不执行的解决办法

没看懂,稍后再看 Ajax中主页加载分页面后,分页面js脚本不执行的解决办法 最近捣鼓JQuery,其中强大的Ajax系列函数令人印象深刻,所以做项目时毫不犹豫地采用了一下该技术,在主页中动态加载分页面进来,咋看效果 不错,都能实现了第一层次的加载,但深入下去问题就出来了:动态加载进来的页面中外联了js文件,其中的脚本却没有在加载后运行! (脚本在单独浏览该分页面时运行是正常的) 我郁闷了,打开Firefox中的Firebug查看了加载后的主页面中的DOM,所有元素的加载都是正常的啊~ 自己改来

关于前中后序排列

大致可以总结如下: 前序排列(preorder):根左右 中序排列(inorder):左根右 后续排序(postorder):左右根 重点看"根"的位置,在最前面就是前序,中间就是中序,后面就是后序.补充一点,上述排列都是DFT(深度优先排列,Depth First Traversals).另有Breadth First or Level Order Traversal . 详解 首先上个例子: 中序是左根右,所以从最左的左节点4开始(其他的还不够"左",例如2,其

STL——前闭后开区间表示法和function call 操作符

前开后闭开区间表示法[) 任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标示的区间,用以表示操作范围,这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示,也就是说,整个实际范围从first开始,直到last-1.迭代器last所指的是“最后一个元素的下一位置”.这种off by one(偏移一格,或说pass the end)的标示法,带来了很多方便,例如下面两个STL算法的循环设计,就显得干净利落: template<class InputIterator,c

前闭后开区间表示法

 任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标识的区间,用以表示操作范围.这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示.也就是说,整个实际范围从first开始,知道last-1.迭代器last所指的是"最后一个元素的下一位置".这种偏移一格的标示法,带来了许多方便,例如下面两个STL算法的循环设计,就显得干净利落: template <class InputIterator,classT> InputIterator find

关于javaBean中boolean类型变量的set和get注入后传到前端JS中的问题

set和get方法如下: public boolean isLine() {        return isLine;    } public void setLine(boolean isLine) {        this.isLine = isLine;    } 这里的isLine变量名最好不要添加is后缀,改成line.否则在前端Js中引用isLine变量时始终是undefined,经发现,传到前端的变量值名字是line,而不是isLine. 关于javaBean中boolean类

main函数执行前、后再执行的代码

一.main结束 不代表整个进程结束  (1)全局对象的构造函数会在main 函数之前执行,          全局对象的析构函数会在main函数之后执行:          用atexit注册的函数也会在main之后执行.  (2)一些全局变量.全局对象和静态变量.对象的空间分配和赋初值就是在执行main函数之前,而main函数执行完后,还要去执行一些诸如释放空间.释放资源使用权等操作  (3)进程启动后,要执行一些初始化代码(如设置环境变量等),然后跳转到main执行.全局对象的构造也在ma