js正则实现从⼀段复杂html代码字符串中匹配并处理特定信息问题:
现在要从⼀个复杂的html代码字符串(包含各种html标签,数字、中⽂等信息)中到某⼀段特别的信息(被⼀对“|”包裹着),并对他进⾏加粗、加下滑线处理。
解决思路:
1、⽤正则匹配“|”出现的次数,处理刚好出现2次的(html字符串中⼀般不会含有这个字符)
2、使⽤正则分组,获取“|”之间的内容,并进⾏替换(添加样式)
代码:
function specialDeal(){
htmlStr = place(/ /, '');
var reg0 = new RegExp("\\|", "g");
var array = htmlStr.match(reg0);
//当且仅当出现"|"的次数等于2时,对"|"之间的内容进⾏加粗、并加下划线
if (array != null && array.size() == 2) {
var reg1=new RegExp("([^\\|]*)(\\|)([^\\|]*)(\\|)([^\\|]*)", "ig");
var result = (htmlStr);
if (result) {
htmlStr = place(reg1,result[1] + "<u><b>" + result[3] + "</b></u>" + result[5]);
}
}
return htmlStr;
}
正则表达式中/i,/g,/ig,/gi,/m的区别和含义
/i (忽略⼤⼩写)
/
g (全⽂查出现的所有匹配字符)
/m (多⾏查)
/gi(全⽂查、忽略⼤⼩写)
/ig(全⽂查、忽略⼤⼩写)
知识点⼤梳理
js正则表达式的编写、js正则常⽤到的⼏个⽅法:match、exec、replace
1、js正则表达
在编写正则的时候,如果使⽤RegExp对象,js正则表达式写在字符串⾥⾯,特别需要注意转义。
Js代码
var reg0=new RegExp("(<span[^>]*(Courier New)[^>]*>)(\\w*)", "ig");
等价于:
var reg0=/(<span[^>]+Courier New[^>]+>)(\w*)/ig;
修饰符
修饰符描述
执⾏对⼤⼩写不敏感的匹配。
执⾏全局匹配(查所有匹配⽽⾮在到第⼀个匹
配后停⽌)。
m执⾏多⾏匹配。
⽅括号
⽅括号⽤于查某个范围内的字符:
表达式描述
查⽅括号之间的任何字符。
查任何不在⽅括号之间的字符。
[0-9]查任何从 0 ⾄ 9 的数字。
[a-z]查任何从⼩写 a 到⼩写 z 的字符。
[A-Z]查任何从⼤写 A 到⼤写 Z 的字符。
[A-Z]查任何从⼤写 A 到⼤写 Z 的字符。[A-z]查任何从⼤写 A 到⼩写 z 的字符。[adgk]查给定集合内的任何字符。
[^adgk]查给定集合外的任何字符。(red|blue|green)查任何指定的选项。
元字符
元字符(Metacharacter)是拥有特殊含义的字符:js中文正则表达式
元字符描述
查单个字符,除了换⾏和⾏结束符。
查单词字符。
查⾮单词字符。
查数字。
查⾮数字字符。
查空⽩字符。
查⾮空⽩字符。
匹配单词边界。
匹配⾮单词边界。
\0查 NUL 字符。
查换⾏符。
\f查换页符。
\r查回车符。
\t查制表符。
\v查垂直制表符。
查以⼋进制数 xxx 规定的字符。
查以⼗六进制数 dd 规定的字符。
查以⼗六进制数 xxxx 规定的 Unicode 字符。
量词
量词描述
匹配任何包含⾄少⼀个 n 的字符串。
匹配任何包含零个或多个 n 的字符串。
匹配任何包含零个或⼀个 n 的字符串。
匹配包含 X 个 n 的序列的字符串。
匹配包含 X 或 Y 个 n 的序列的字符串。
匹配包含⾄少 X 个 n 的序列的字符串。
匹配任何结尾为 n 的字符串。
匹配任何开头为 n 的字符串。
匹配任何其后紧接指定字符串 n 的字符串。
匹配任何其后没有紧接指定字符串 n 的字符串。
RegExp 对象属性
FF: Firefox, IE: Internet Explorer
属性描述FFIE
RegExp 对象是否具有标志 g。14 RegExp 对象是否具有标志 i。14
⼀个整数,标⽰开始下⼀次匹配的字符位置。14 RegExp 对象是否具有标志 m。14
正则表达式的源⽂本。14 2、Match()⽅法
定义和⽤法
match() ⽅法可在字符串内检索指定的值,或到⼀个或多个正则表达式的匹配。
该⽅法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,⽽不是字符串的位置。
语法
stringObject.match(searchvalue)
stringObject.match(regexp)
参数描述
searchvalue必需。规定要检索的字符串值。
regexp必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要⾸先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
说明
match() ⽅法将检索字符串 stringObject,以到⼀个或多个与 regexp 匹配的⽂本。这个⽅法的⾏为在很⼤程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() ⽅法就只能在 stringObject 中执⾏⼀次匹配。如果没有到任何匹配的⽂本, match() 将返回 null。否则,它将返回⼀个数组,其中存放了与它到的匹配⽂本有关的信息。该数组的第 0 个元素存放的是匹配⽂本,⽽其余的元素存放的是与正则表达式的⼦表达式匹配的⽂本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。 index 属性声明的是匹配⽂本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引⽤。
如果 regexp 具有标志 g,则 match() ⽅法将执⾏全局检索,到 stringObject 中的所有匹配⼦字符串。若没有到任何匹配的⼦串,则返回null。如果到了⼀个或多个匹配⼦串,则返回⼀个数组。不过全局匹配返回的数组的内容与前者⼤不相同,它的数组元素中存放的是stringObject 中所有的匹配⼦串,⽽且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与⼦表达式匹配的⽂本的信息,也不声明每个匹配⼦串的位置。如果您需要这些全局检索的信息,可以使⽤ ()。
3、exec()⽅法
定义和⽤法
exec() ⽅法⽤于检索字符串中的正则表达式的匹配。
语法
<(string)
参数描述
string必需。要检索的字符串。
返回值
返回⼀个数组,其中存放匹配的结果。如果未到匹配,则返回值为 null。
说明
exec() ⽅法的功能⾮常强⼤,它是⼀个通⽤的⽅法,⽽且使⽤起来也⽐ test() ⽅法以及⽀持正则表达式的 String 对象的⽅法更为复杂。
如果 exec() 到了匹配的⽂本,则返回⼀个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的⽂本,第 1 个元素是与 RegExpObject 的第 1 个⼦表达式相匹配的⽂本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个⼦表达式相匹配的⽂本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() ⽅法还返回两个属性。index 属性声明的是匹配⽂本的第⼀个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调⽤⾮全局的 RegExp 对象的 exec() ⽅法时,返回的数组与调⽤⽅法String.match() 返回的数组是相同的。
但是,当 RegExpObject 是⼀个全局正则表达式时,exec() 的⾏为就稍微复杂⼀些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 到了与表达式相匹配的⽂本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配⽂本的最后⼀个字符的下⼀个位置。这就是说,您可以通过反复调⽤ exec() ⽅法来遍历字符串中的所有匹配⽂本。当 exec() 再也不到匹配的⽂本时,它将返回 null,并把 lastIndex 属性重置为 0。
提⽰和注释
重要事项:如果在⼀个字符串中完成了⼀次模式匹配之后要开始检索新的字符串,就必须⼿动地把 lastIndex 属性重置为 0。
提⽰:请注意,⽆论 RegExpObject 是否是全局模式,exec() 都会把完整的细节添加到它返回的数组
中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。因此我们可以这么说,在循环中反复地调⽤ exec() ⽅法是唯⼀⼀种获得全局模式的完整模式匹配信息的⽅法。
4、replace()⽅法
定义和⽤法
replace() ⽅法⽤于在字符串中⽤⼀些字符替换另⼀些字符,或替换⼀个与正则表达式匹配的⼦串。
语法
参数描述
必需。规定⼦字符串或要替换的模式的 RegExp 对象。
regexp/substr
请注意,如果该值是⼀个字符串,则将它作为要检索的直接量⽂本模式,⽽不是⾸先被转换为 RegExp 对象。replacement必需。⼀个字符串值。规定了替换⽂本或⽣成替换⽂本的函数。
返回值
⼀个新的字符串,是⽤replacement替换了 regexp 的第⼀次匹配或所有匹配之后得到的。
说明
字符串 stringObject 的 replace() ⽅法执⾏的是查并替换的操作。它将在 stringObject 中查与 regexp 相匹配的⼦字符串,然后
⽤replacement来替换这些⼦串。如果 regexp 具有全局标志 g,那么 replace() ⽅法将替换所有匹配的⼦串。否则,它只替换第⼀个匹配⼦串。
replacement可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所⽰,它说明从模式匹配得到的字符串将⽤于替换。
字符替换⽂本
$1、$2、...、$99与 regexp 中的第 1 到第 99 个⼦表达式相匹配的⽂本。
$&与 regexp 相匹配的⼦串。
$`位于匹配⼦串左侧的⽂本。
$'位于匹配⼦串右侧的⽂本。
$$直接量符号。
注意:ECMAScript v3 规定,replace() ⽅法的参数 replacement 可以是函数⽽不是字符串。在这种情况下,每个匹配都调⽤该函数,它返回的字符串将作为替换⽂本使⽤。该函数的第⼀个参数是匹配模式的字符串。接下来的参数是与模式中的⼦表达式匹配的字符串,可以有 0
个或多个这样的参数。接下来的参数是⼀个整数,声明了匹配在 stringObject 中出现的位置。最后⼀个参数是 stringObject 本⾝。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。