`
zhifeichuan
  • 浏览: 20517 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

javascript,java 正则表达式反向引用 实际应用

阅读更多
一、问题描述:要将下面的字符串中的href="detail.jsp?fruit=x3&column=y5" 替换为onclick="ClickChart('x3','y5')"

就是将x3和y5拿出来作为ClickChart的两个参数

<map id="filemap" name="filemap">
<area shape="rect" coords="731,89,751,526" title="(x3, y5) = 8" alt="" href="detail.jsp?fruit=x3&amp;column=y5">
<area shape="rect" coords="699,144,719,526" title="(x2, y5) = 7" alt="" href="detail.jsp?fruit=x2&amp;column=y5"/>

</map>

二、编写函数

1.javascript

//param为要处理的字符串
  function buildNewString(param){
   if(param == null || param.length == 0){
    return "";
   }

   //([\s\S]*)为匹配任意字符
   var reg_1 = /^([\s\S]*)href=\"([\s\S]*)fruit=(x\d)([\s\S]*)column=(y\d)\"([\s\S]*)$/;
   var reg_2 = /href=\"([\s\S]*)\"/;

   var arrayStr = param.split("/>");

   if(arrayStr.length < 1) {
    return "";
   }
  
   var resultStr = "";

   //数组arrayStr最后一项为“</map>”,不处理
   for(var i = 0; i < arrayStr.length-1; i ++){
    reg_1.test(arrayStr[i]);
    resultStr += arrayStr[i].replace(reg_2,"onclick=\"ClickChart('" + RegExp.$3+ "','" + RegExp.$5 + "')\"") + "/>";
   }
   return resultStr + "</map>";
  }

2.java

public static String buildNewString(String param){
  if(param == null || param.length() == 0){
   return "";
  }

  String reg_1 = "([\\s\\S]*)href=\"([\\s\\S]*)fruit=(x\\d)([\\s\\S]*)column=(y\\d)\"([\\s\\S]*)";
  String reg_2 = "href=\"([\\s\\S]*)\"";

  String [] arrayStr = param.split("/>");

  if(arrayStr.length < 1) {
   return "";
  }
 
  String resultStr = "";

  //数组arrayStr最后一项为“</map>”,不处理
  for(int i = 0; i < arrayStr.length-1; i ++){
   //arrayStr[i].matches(reg_1);
   Pattern p = Pattern.compile(reg_1);
   Matcher matcher = p.matcher(arrayStr[i]);
   matcher.find();
   resultStr += arrayStr[i].replaceAll(reg_2,"onclick=\"ClickChart('" + matcher.group(3) + "','" + matcher.group(5) + "')\"") + "/>";
  }
  return resultStr + "</map>";
}

public static void main(String[] args) {
  String param ="<map id=\"filemap\" name=\"filemap\">"+
  "<area shape=\"rect\" coords=\"731,89,751,526\"" +
  "title=\"(x3, y5) = 8\" alt=\"\" href=\"detail.jsp?" +
  "fruit=x3&amp;column=y5\" onclick=ClickChart(x3,y5)/>"+
  "<area shape=\"rect\" coords=\"699,144,719,526\" " +
  "title=\"(x2, y5) = 7\" alt=\"\" href=\"detail.jsp?fruit=x2&amp;column=y5\"/></map>";
  System.out.println(buildNewString(param));
}

三、反向引用

讲反向应用之前先讲一下分组。定义:分组是通过用一系列括号包围一系列字符、字符类以及量词来使用的。例如想匹配字符串“dogdog”。非分组的方法:var reDogDog = /dogdog/g; 但是只要匹配两次呢?

可用分组解决:var reDogDog = /(dog){2}/g;

反向引用

怎样利用分组呢?每个分组都被存放在一个特殊的地方以备后来使用,这些存储在分组中的特殊值,我们称之为反向引用(backreference)。反向引用是按照从左到右遇到的左括号字符的顺序进行创建和编号的。例如var reg_1 = /^([\s\S]*)href=\"([\s\S]*)fruit=(x\d)([\s\S]*)column=(y\d)\"([\s\S]*)$/;将从左到右产生6个反向引用

1.([\s\S]*)、2.([\s\S]*)、3.(x\d)、4.([\s\S]*)、5.(y\d)、6.([\s\S]*)

反向引用可以通过执行test(),match(),search()方法后,通过RegExp构造函数中获得。例如我们要想获得匹配(x\d)的字符可通过RegExp.$3获得。

分享到:
评论

相关推荐

    JavaScript正则表达式之后向引用实例代码

    贪婪、非贪婪与回溯PHP正则表达式的效率 回溯与固化分组正则表达式之回溯AS3 js正则表达式 反向引用(backreference)详解JavaScript正则表达式之分组匹配及反向引用php正则表达式的模式修正符和逆向引用使用介绍PHP...

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    C# 最全的日期正则表达式,没有之一

    而实际应用中,日期的范围基本上不会超出DateTime所规定的范围,所以正则验证取其中常用的日期范围即可。 2.2 什么是闰年 (以下摘自百度百科) 闰年(leap year)是为了弥补因人为历法规定造成的年度天数与地球实际...

    正则表达式30分钟入门教程

    正则表达式引擎通常会提供一个“测试指定的字符串是否匹配一个正则表达式”的方法,如JavaScript里的RegExp.test()方法或.NET里的Regex.IsMatch()方法。这里的匹配是指是字符串里有没有符合表达式规则的部分。如果不...

    理解javascript正则表达式

    可以是任何简单或复杂的正则表达式,可以包含字符类,限定符,分组,向前查找,反向引用。 关于正则表达式中各种特殊字符(如 \,^,$,\w,\b 等)的含义可以参考 MDN 正则表达式-特殊字符 的整理。这里我们简单介绍一下...

    详解javascript 正则表达式之分组与前瞻匹配

    本文主要讲解javascript 的正则表达式中的分组匹配与前瞻匹配的,需要对正则的有基本认识,本人一直对两种匹配模棱不清。所以在这里总结一下,如有不对,还望大神指点。 1.分组匹配:  1.1捕获性分组匹配 ()  2.2...

    PHP 正则表达式 推荐

    介绍 正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,php等等,我今天就把我对正则表达式的理解跟大家唠唠,不当之处,请多多指教! 需要知道的术语...

    PHP正则表达式基础入门

    正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如JavaScript、Java、.Net、PHP 等,我今天就把我对正则表达式的理解跟大家唠唠,不当之处,请多多指教! 需要知道的术语——...

    javascript的正则表达式学习资料复习

    关于反向引用 代码如下: // 测试函数 function matchReg(reg, str) { var result = str.match(reg); if(result) { console.dir(result); } else { console.log(‘match failed’); } } var reg = /([A-Za-z]{0,6})\1...

    javascript中正则表达式反向引用示例介绍

    最近遇到一个需求,传入一个字符串,每三个字符插入一个空格 例: 传入abcd1234 输出 abc d12 34 思考了一下,准备写一个函数如下 代码如下: function appendSpace(s) { var length = s.length;...

    java web技术开发大全(最全最新)

    3.3.4 正则表达式 3.3.5 实例:表格排序 3.4 CSS基础 3.4.1 CSS的基本语法 3.4.2 在Style属性中定义样式 3.4.3 在HTML中定义样式 3.4.4 在外部文件中定义样式 3.4.5 样式的继承 3.5 AJAX.基础 ...

    java web开发技术大全

    3.3.4 正则表达式 3.3.5 实例:表格排序 3.4 CSS基础 3.4.1 CSS的基本语法 3.4.2 在Style属性中定义样式 3.4.3 在HTML中定义样式 3.4.4 在外部文件中定义样式 3.4.5 样式的继承 3.5 AJAX....

    javalruleetcode-leetcode_js:Javascript中的LeetCode解决方案

    正则表达式 Matching.js 11 个 Water.js 最多的容器 12 整数到 Roman.js 13 Roman 到 Integer.js 14 最长公共前缀.js 15 3Sum.js 16 3Sum Closest.js 电话号码的 17 个字母组合.js 19 从 List.js 的末尾删除第 N 个...

    基于Java和Python的爬虫项目实战源码.zip

    正则表达式: 对URL进行过滤,只提取符合特定格式的链接; 提取网页内容; HTMLParser: 文本抽取; 链接抽取; 资源抽取; 链接检查; 站点检查; URL重写; 广告清除; 将HTML页面转化成XML页面; HTML页面清理; ...

    redquark:支持使用Gatsby,ReactJS和Node构建的个人网站的代码

    正则表达式匹配 装满水的容器 整数转罗马 罗马到整数 最长的公共前缀 3总和 3总和 电话号码的字母组合 4个总和 从列表末尾删除第N个节点 有效括号 合并两个排序列表 产生括号 合并K排序列表 成对交换节点 K组中的...

    JavaScript高级教程

    第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................

Global site tag (gtag.js) - Google Analytics