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

本文介绍如何使用JavaScript和Java实现字符串中的特定模式替换,重点讲解了如何通过正则表达式提取并替换URL参数,同时涉及了反向引用的概念。
一、问题描述:要将下面的字符串中的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&column=y5">
<area shape="rect" coords="699,144,719,526" title="(x2, y5) = 7" alt="" href="detail.jsp?fruit=x2&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&column=y5\" onclick=ClickChart(x3,y5)/>"+
"<area shape=\"rect\" coords=\"699,144,719,526\" " +
"title=\"(x2, y5) = 7\" alt=\"\" href=\"detail.jsp?fruit=x2&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正则表达式Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值