`
smile_future
  • 浏览: 6873 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

js正则实现从一段复杂html代码字符串中匹配并处理特定信息

阅读更多

问题:

      现在要从一个复杂的html代码字符串(包含各种html标签,数字、中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他进行加粗、加下滑线处理。

解决思路:

1、用正则匹配“|”出现的次数,处理刚好出现2次的(html字符串中一般不会含有这个字符)

2、使用正则分组,获取“|”之间的内容,并进行替换(添加样式)

代码:

 

function specialDeal(){
    htmlStr = htmlStr.replace(/ /, '');
    var reg0 = new RegExp("\\|", "g");
    var array = htmlStr.match(reg0);
    //当且仅当出现"|"的次数等于2时,对"|"之间的内容进行加粗、并加下划线
    if (array != null && array.size() == 2) {
        var reg1=new RegExp("([^\\|]*)(\\|)([^\\|]*)(\\|)([^\\|]*)", "ig");
        var result = reg1.exec(htmlStr);
        if (result) {
            htmlStr = htmlStr.replace(reg1,result[1] + "<u><b>" + result[3] + "</b></u>" + result[5]);
        
        }
    }
    return htmlStr;
}

 

知识点大梳理

js正则表达式的编写、js正则常用到的几个方法:match、exec、replace

1、js正则表达

在编写正则的时候,如果使用RegExp对象,js正则表达式写在字符串里面,特别需要注意转义。

例:

var reg0=new RegExp("(<span[^>]*(Courier New)[^>]*>)(\\w*)", "ig");

     等价于:

 

var reg0=/(<span[^>]+Courier New[^>]+>)(\w*)/ig;

 

 

修饰符

修饰符描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

方括号

方括号用于查找某个范围内的字符:

表达式描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。
(red|blue|green) 查找任何指定的选项。

元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符描述
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。
\B 匹配非单词边界。
\0 查找 NUL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

量词

量词描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。

RegExp 对象属性

FF: Firefox, IE: Internet Explorer

属性描述FFIE
global RegExp 对象是否具有标志 g。 1 4
ignoreCase RegExp 对象是否具有标志 i。 1 4
lastIndex 一个整数,标示开始下一次匹配的字符位置。 1 4
multiline RegExp 对象是否具有标志 m。 1 4
source 正则表达式的源文本。 1 4

 

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() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。

 

3、exec()方法

定义和用法

exec() 方法用于检索字符串中的正则表达式的匹配。

语法

RegExpObject.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() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法

stringObject.replace(regexp/substr,replacement)
参数 描述
regexp/substr

必需。规定子字符串或要替换的模式的 RegExp 对象。

请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 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 本身。

 

分享到:
评论

相关推荐

    JavaScript正则表达式匹配 div style标签

    在处理HTML文档时,经常会遇到需要从HTML代码中提取特定信息的情况,比如从一段字符串中匹配`&lt;div&gt;`和`&lt;style&gt;`标签。 在进行正则表达式匹配时,需要构建能够正确描述目标模式的正则表达式。对于`&lt;div&gt;`和`&lt;style&gt;`...

    JS正则表达式获取字符串中特定字符的方法

    在JavaScript中,正则表达式是一种强大且灵活的文本处理工具,它可以用来搜索、匹配和操作字符串。本文将介绍如何使用正则表达式结合replace方法的回调函数功能来获取字符串中特定字符。这一技能在处理字符串数据时...

    javascript将字符串中的多个空格替换为一个空格的正则实例.docx

    以下是一段简单的JavaScript代码示例,演示如何使用正则表达式和`replace()`方法来实现这一功能: ```javascript // 定义一个函数来替换字符串中的多个空格 function resetBlank(str) { // 使用正则表达式匹配多个...

    mysql基于正则实现模糊替换字符串的方法分析

    在MySQL中,有时候我们需要对数据库中的字符串进行模糊替换,特别是在处理HTML标签或者特定模式的数据时。正则表达式(Regular Expression)在这种情况下显得尤为强大。MySQL提供了`REGEXP_REPLACE`函数(在某些版本...

    JS使用正则截取两个字符串之间的字符串实现方法详解

    尤其当我们需要从一段文本中提取特定的信息时,正则表达式(Regular Expression)就显得格外有用。正则表达式是一种强大的文本处理工具,它通过使用一系列特殊字符的组合来匹配字符串中的特定模式。在本篇中,我们将...

    js 正则匹配(去掉html标签)

    这段代码使用了正则表达式`/&lt;[^&gt;]+&gt;/g`来匹配所有的HTML标签并将其替换为空字符串。其中,`和`&gt;`分别代表HTML标签的开始和结束符号,`[^&gt;]+`表示任何非`&gt;`的字符,`g`标志表示全局匹配,即匹配所有符合条件的部分。...

    js使用split函数按照多个字符对字符串进行分割的方法

    通过灵活运用split()函数和正则表达式,我们能够处理复杂的字符串分割需求,从而在JavaScript中处理字符串数据时更加得心应手。该方法不仅适用于简单的字符串操作,还可以在数据清洗、文本分析等应用场景中发挥重要...

    js版字符串快速检索

    在JavaScript开发中,字符串快速检索是一项重要的技能,尤其是在处理大量文本数据时。"js版字符串快速检索"这个主题聚焦于如何高效地在JavaScript环境中查找字符串中的特定子串。以下是一些相关的知识点,涵盖了基础...

    正则表达式各匹配字符含义

    正则表达式是一种强大的文本处理工具,能够帮助我们完成各种复杂的字符串搜索、替换等功能。在编程语言如Python、JavaScript、Java等中均有广泛应用。通过组合不同的字符与特殊符号,可以构造出能够精确匹配目标字符...

    正则字符串分隔显示

    在本案例中,"正则字符串分隔显示"是指利用正则表达式来分割字符串,并将结果展示出来。这通常涉及到编程语言中的字符串处理函数,如JavaScript的`split()`、C#的`Regex.Split()`或者Python的`re.split()`等。 正则...

    javascript使用正则实现去掉字符串前面的所有0

    在JavaScript中,有时我们需要处理包含...对于这个特定的场景,通过匹配并替换匹配到的模式,我们可以轻松地去除JavaScript字符串中的前导零。在实际开发中,理解并熟练掌握正则表达式能帮助我们更高效地解决类似问题。

    经典JavaScript正则表达式实战

    总结来说,JavaScript正则表达式在处理字符串、验证数据、文本处理等方面有广泛的应用。掌握正则表达式能够提高开发效率,解决实际问题。在实际应用中,正则表达式需要结合具体需求进行灵活编写和调整。

    js代码-js 正则匹配数字+指定字符+空格

    在给定的标题和描述中,“js代码-js 正则匹配数字+指定字符+空格”指的是利用正则表达式在JS中实现对包含数字、特定字符以及空格的字符串进行匹配。下面我们将深入探讨如何构建这样的正则表达式以及在JS中如何使用它...

    js正则表达式校验指定字符串的方法

    在JavaScript编程中,正则表达式是一种强大的文本匹配工具,它可以用来校验字符串是否符合特定的模式。本文将详细介绍如何使用JavaScript中的正则表达式来校验指定字符串,确保字符串符合特定的格式要求。 首先,...

    正则表达式判断手机邮箱

    正则表达式(Regular Expression)是一种模式匹配工具,用于在文本中查找、替换或提取符合特定规则的字符串。在IT行业中,正则表达式被广泛应用于数据验证、文本处理、爬虫程序等领域,特别是在判断手机号码和邮箱...

    RegExp正则表达式

    3. **模式匹配**:从字符串中提取子字符串,比如从一段文本中找出所有的邮箱地址。 #### 三、正则表达式的语法格式 正则表达式的格式通常如下所示: ``` /pattern/flags ``` - `pattern`:要匹配的模式。 - `flags...

    Javascript正则表达式

    正则表达式(Regular Expression),简称regex或regexp,在JavaScript中是一种用于处理字符串的强大工具,它能够帮助开发者进行模式匹配、搜索和替换操作。正则表达式本质上是由一系列字符和特殊符号组成的模式字符...

    javasrcipt去字符串空格

    正则表达式可以非常灵活地匹配字符串中的特定模式。 ##### 示例代码 ```javascript var str = " Hello World! "; str = str.replace(/\s/g, ''); console.log(str); // 输出:"HelloWorld!" ``` 这段代码中的关键...

    js 正则表达式学习笔记之匹配字符串

    ### JavaScript正则表达式在字符串匹配中的应用 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在前端开发中占据着重要的地位。其强大的正则表达式支持为字符串操作提供了极大的便利。本文将深入探讨如何...

Global site tag (gtag.js) - Google Analytics