對Regex練習器的改進

來源:互聯網
上載者:User
正則 對Regex練習器的改進,原貼ID901680

覆蓋原execIt函數
修改後的execIt函數允許對多個Regex進行匹配(每個Regex一行),並對每一個匹配成分顯示出是第幾個Regex匹配的。
這可視為文法分析的雛形,只要對匹配產生相應的動作。

function execIt(form) {
  var mode
  if(form.chkmode.checked) mode = "gi"
  else mode = "g"
  var regexpArray = form.regexp.value.split("\r\n")  //擷取Regex到數組

  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)
    //對每個Regex進行匹配
    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)
}



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。