对正则表达式练习器的改进

正则

对正则表达式练习器的改进,原贴ID901680

覆盖原execIt函数
修改后的execIt函数允许对多个正则表达式进行匹配(每个正则表达式一行),并对每一个匹配成分显示出是第几个正则表达式匹配的。
这可视为语法分析的雏形,只要对匹配产生相应的动作。

function execIt(form) {
  var mode
  if(form.chkmode.checked) mode = "gi"
  else mode = "g"
  var regexpArray = form.regexp.value.split("\r\n")  //获取正则表达式到数组

  if(nextpoint == 0) form.reglist.value = ""
  var key = true
  if(form.scankmode.checked) key = false
  else nextpoint = 0
  do {
    var offs = 9999999999
    var pos = -1
    var input = form.main.value.substr(nextpoint)
    //对每个正则表达式进行匹配
    for(var i=0;i<regexpArray.length;i++) {
      re.compile(regexpArray[i],mode)
      var matchArray = re.exec(input)
      if(matchArray) {
        if(offs > matchArray.index) {
          offs = matchArray.index
          pos = i  //保存距离起始位子最近的匹配
        }
      }
    }
    if(pos>=0) {
      re.compile(regexpArray[pos],mode)
      var matchArray = re.exec(input)
      for(var i=1;i<matchArray.length;i++)
        matchArray[i] = "$"+i+":"+matchArray[i]
      form.reglist.value = "["+(pos+1)+"]"+(nextpoint+matchArray.index)+" => " + matchArray[0] +"\n"+form.reglist.value
      form.matchlist.value = "$0:"+matchArray.join("\n")
      nextpoint = nextpoint + matchArray.index + matchArray[0].length
    }else {
      if(!key)
        form.reglist.value = "没有找到\n" + form.reglist.value
      form.matchlist.value = " "
      nextpoint = 0
      key = false
    }
  }while(key)
}

时间: 2024-08-20 03:16:47

对正则表达式练习器的改进的相关文章

正则表达式练习器_正则表达式

复制代码 代码如下: <HTML><HEAD><TITLE>正则表达式练习器</TITLE><meta name = 安徽 池州 统计局 徐祖宁 e-mail:czjsz@stats.gov.cn><script language="JavaScript">function OnMove() {window.status = "("+window.event.clientX+",&qu

一个非常好的正则表达式练习器

正则     正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了.为此,我编写了这个练习器用来帮助学习.    请多指教! *********将以下代码复制到 RegExp.htm 即可 **********<HTML><HEAD><TITLE>正则表达式练习器</TITLE><meta name = 安徽 池州 统计局 徐祖宁 e-mail:czjsz@stats.gov.cn><script language="Jav

正则表达式练习器

正则 正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了.为此,我编写了这个练习器用来帮助学习.请多指教! *********将以下代码复制到 RegExp.htm 即可 **********<HTML><HEAD><TITLE>正则表达式练习器</TITLE><meta name = 安徽 池州 统计局 徐祖宁 e-mail:czjsz@stats.gov.cn><script language="JavaScript&

正则表达式大全

正则 摘要:收集一些常用的正则表达式. 正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番.我将一些常用的表达式收藏在这里,作备忘之用.本贴随时会更新. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x0

JAVA 正则表达式

在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式.正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性.在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛. 正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等.此外,许多使用比较广泛

正则表达式,相关链接_正则表达式

正则表达式,相关链接   http://blog.csdn.net/laily/category/19548.aspx http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微软的正则表达式教程(五):选择/编组和后向引用 http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微软的正则表达式教程(四):限定符和定位符 http://blog.csdn.ne?琼?渦獢p????

正则表达式,相关链接

正则表达式,相关链接 http://blog.csdn.net/laily/category/19548.aspx http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微软的正则表达式教程(五):选择/编组和后向引用 http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微软的正则表达式教程(四):限定符和定位符 http://blog.csdn.ne?琼?渦獢p?????浜

正则验证js大全

正则验证js大全 欢迎入群技术交流:466355109,技术不全没关系,只要有交流的心就尽管来吧 function f_MobilCheck(as_SourceString) { if(as_SourceString.match(/^13[0-9]{9}$/g)) return true; //手机号为13开头的11位数字 else if(as_SourceString.match(/^[0]{1}[0-9]{2,3}[2-8]{1}[0-9]{5,7}$/g)) return true; //

无殇 javascript正则练习器_正则表达式

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 这里有一些可能会遇到的正则表达式示例: JScript VBScript 匹配 /^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行. /\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个