`
ywxowen999
  • 浏览: 24147 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

一段优美的正则

阅读更多
记录下来,一段优美的代码。来源于jQuery,不过我是从kissy1.3源码中看到的。看来kissy还是大量参照了jquery啊。
代码如下:
var R_XHTML_TAG = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig;
function create( html ){
//...略
  html = html.replace(R_XHTML_TAG, '<$1><' + '/$2>');
//...略
}

代码非常简单,作用是按照XHTML标准为需要成对出现的标签做补全。
例如:'<div/>'这样子的字符串通过通过处理后得到<div></div>
作用就是这样子。下面开始分析代码。

1、正则的开始是/<,代表正则要匹配的第一个字符时<
2、(?!area|br|col|embed|hr|img|input|link|meta|param),代表接下来的字符不匹配所列标签名,也就是过滤掉直接关闭的标签。
(?!pattern) 这种语法叫做负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

3、(([\w:]+)[^>]*),首先需要注意这里的两个括号是代表两个获取匹配。获取的匹配结果待后续使用。由于有1,2两点约束为前提,[\w:]能够匹配的内容是紧跟在<号之后,切不为2中列举的标签的标签名(注:\w = [A-Za-z0-9_])。
[^>]*代表所有非>号字符,用于匹配标签内的属性。
两段加起来就可以匹配 div width='960px'这样子的结构了。
两个匹配结果$1也就等于 标签名+属性的组合如 div width='960px' $2 等于标签名如div

4、表达式以\/>结尾。没什么好解释的

正则匹配之后另一个需要关心的问题就是如何修改字符串的问题,怎么补全丢掉的结束标签。
这里利用了String.replace()的能力。
字符串 String的 replace() 方法执行的是查找并替换的操作。它将在 String中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是。如果函数它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符 替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。

这就是'<$1><' + '/$2>'的意义,把第三段匹配中保存的第一个结果放入开始标签,把第二个结果放入结束标签如$1 = div width='960px' , $2 = div 组合起来就是<div width='960px'></div>
瞧,是不是很棒。
END
分享到:
评论

相关推荐

    gcv.rar_GCV正则化参数_正则化 matlab_正则化函数_正则化工具箱_正则参数

    在机器学习和统计建模中,正则化是一种非常重要的技术,它可以帮助我们避免过拟合,提升模型的泛化能力。在这个名为“gcv.rar”的压缩包中,包含了一个名为“gcv.m”的MATLAB文件,这实际上是MATLAB中的GCV...

    正则化算法matlab

    正则化算法是机器学习和统计学中一种重要的方法,用于防止模型过拟合,提高模型的泛化能力。在MATLAB中,有许多内置的工具和函数支持正则化的实现,比如“Regularization Tools Version 4.1”这个库就提供了丰富的...

    正则表达式验证工具,正则表达式校验工具

    3、选择排除规则,一、按正则表达式把源码中符合正则的删除;二、按正则表达式把源码中符合正则的找出;三、符合正则表达式的显示True 4、选择是否不区分大小写(RegexOptions.IgnoreCase),单行模式...

    Lucene 使用正则表达式

    这段代码初始化了一个`IndexWriter`,用于创建新的索引。`new StandardAnalyzer()`表示使用标准分析器对文本进行分词处理。 2. **文档添加**: ```java Document doc1 = new Document(); Document doc2 = new ...

    常用正则表达式 正则表达式

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一种特殊的语法来描述一个字符串集合,可以非常灵活地表示各种复杂的字符串格式...

    pb 使用正则表达式源码pbregexp

    正则表达式是一种模式匹配语言,它允许开发者用简洁的语法来描述一组字符串的共同特征。在PowerBuilder中,pbregexp组件提供了一个接口,使得开发者可以方便地在PB脚本中使用正则表达式功能。这个组件可能包含以下...

    正则表达式正则表达式.zip

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它在IT行业中广泛应用,尤其是在编程语言、文本编辑器、数据分析和网页爬虫等领域。本压缩包包含一个名为“正则表达式语法.docx”的...

    精通 JS正则表达式

    通过`RegExp`构造函数创建正则表达式时,需要提供两个参数:一个是正则表达式的文本内容,另一个是可选的标志,如`g`(全局匹配)、`i`(不区分大小写)和`m`(多行模式)。例如: ```javascript var re = new ...

    常用正则化MATLAB算法-附带详细说明

    在IT领域,正则化是一种重要的数学方法,用于防止机器学习模型过拟合,提高模型的泛化能力。本文将详细讲解正则化的概念、应用以及在MATLAB环境中的实现,包括离散病态问题、正则化工具教程以及正规化工具的参考。 ...

    qt正则表达式测试工具

    这个"qt正则表达式测试工具"显然是一个帮助开发者验证和调试正则表达式的实用程序。 正则表达式是一种特殊的文本字符串,用于描述复杂或重复的文本模式。它们在搜索、替换、数据提取等任务中非常有用。在Qt中,...

    正则表达式测试器

    2. **目标文本**:用户可以输入或粘贴一段文本,测试正则表达式是否能正确匹配其中的模式。 3. **匹配按钮**:点击后,测试器会高亮显示所有匹配的子串,并可能提供匹配详情,如匹配的开始和结束位置。 4. **替换...

    nodejs+字符串的模式匹配+正则表达式+判断获取字符串的某些需求

    正则表达式是一种强大的文本处理工具,能够帮助开发者高效地完成字符串的查找、替换等操作。在JavaScript中,正则表达式同样发挥着重要作用,尤其是在Node.js环境中进行字符串模式匹配时。本文将详细介绍如何在...

    强大的正则表达式生成工具 C#版

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。C#作为.NET框架的一部分,提供了全面支持正则表达式的类库,使得开发人员能够方便地利用正则表达式进行复杂的文本处理任务。在这个...

    图像的正则化滤波实现.zip

    在图像处理领域,正则化滤波是一种常用的技术,它用于改善图像质量,尤其是在存在噪声或模糊的情况下。本文将深入探讨正则化滤波的概念、MATLAB中的实现以及其在图像处理中的应用。 正则化滤波是图像去噪和恢复的一...

    正则表达式翻译工具,RegexTest.exe

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取特定模式的字符串。RegexTest.exe 是一个专门用于测试和解析正则表达式的应用程序,它可以帮助用户理解和调试...

    正则表达式学习笔记

    #### 一、正则表达式概述 正则表达式是一种强有力的模式匹配工具,广泛应用于各种编程语言中,用于文本处理。正则表达式允许用户定义复杂的查找模式,这对于数据验证、搜索和替换操作特别有用。 #### 二、基本概念...

    正则表达式.pdf

    正则表达式是一种逻辑公式,用于对字符串进行操作的模式匹配。它通过事先定义好的特定字符和这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用于表达对字符串的过滤逻辑。正则表达式不仅限于Python...

    java .net 正则表达式调试器

    为了解决这一问题,专门出现了正则表达式调试器,它能帮助开发者直观地理解正则表达式的匹配过程,从而快速定位和修复错误。 本文将围绕“Java .NET 正则表达式调试器”展开讨论,该调试器是基于.NET Framework构建...

    Hansen 正则化matlab工具箱

    L曲线法是一种直观且实用的选择正则化参数的方法,它通过绘制残差平方和与正则化参数的对数图,找到折角最明显处,以平衡模型复杂度和拟合程度。而Tikhonov正则化,也称作L2正则化,通过在目标函数中加入正则项,...

    JS input正则验证大全

    :13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|17[0|1|3|5|6|7|8]|18[0-9]|19[8|9])\d{8}$/`来验证,这个正则涵盖了中国移动、中国联通、中国电信及虚拟运营商的号码段。 5. **银行卡验证**: - 银行卡号可能有多种长度...

Global site tag (gtag.js) - Google Analytics