记录下来,一段优美的代码。来源于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
分享到:
相关推荐
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地定义要查找的模式。以下是一些常见的正则表达式模式及其用途: 1. ...
正则化算法是机器学习和统计学中一种重要的方法,用于防止模型过拟合,提高模型的泛化能力。在MATLAB中,有许多内置的工具和函数支持正则化的实现,比如“Regularization Tools Version 4.1”这个库就提供了丰富的...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
在这个场景下,正则表达式是一个非常重要的工具,用于处理和分析文本数据。正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则...
正则表达式(Regular Expression,简称正则)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在编程和数据分析领域,正则表达式扮演着至关重要的角色,尤其是在文本处理和数据清洗方面。正则解析器是专门...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串的模式匹配。在本主题中,我们将深入探讨如何使用正则表达式来生成满足特定条件的随机数据。这在...
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...
这个"qt正则表达式测试工具"显然是一个帮助开发者验证和调试正则表达式的实用程序。 正则表达式是一种特殊的文本字符串,用于描述复杂或重复的文本模式。它们在搜索、替换、数据提取等任务中非常有用。在Qt中,...
这个表达式的含义是:字符串必须以字母、数字、下划线、点、百分号、加号或减号开始,接着是一个@符号,然后是一段由字母、数字、点组成的内容,最后是一个点,后面跟着两个或更多的字母。 正则表达式的构成元素...
正则表达式是一种用于文本模式匹配的强大工具,在处理字符串时极为有用。日期格式验证是正则表达式常见应用场景之一,尤其是在表单验证、数据清洗等领域。本文将详细介绍几种常用的日期正则表达式及其原理。 #### ...
L1正则化,也称为L1范数惩罚,是机器学习和统计学中的一个重要概念,主要用于处理模型的过拟合问题。它通过在损失函数中添加一个项,即所有模型参数的绝对值之和,来限制模型的复杂度。L1正则化的这种特性使得某些...
下面是一段JavaScript代码示例,展示如何使用上述正则表达式验证输入: ```javascript function validateAmount(amountStr) { const regex = /^-?[0-9]+(\.[0-9]{1,2})?$/; return regex.test(amountStr); } ...
"1111.rar_BTV_btv 正则化_全变分_双边全变分_正则化"这个标题暗示了我们正在探讨的是一个关于图像处理的项目,其中涉及到的关键概念包括BTV(Block-Term Variation)、全变分(Total Variation)和双边全变分...
在labview中使用正则匹配模式很简单,难的就是使用正则表达式。很多人都搞不明白,查了很多资料还是不太明白。实际上就是一些类似通配符在作怪和...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式是指一个字符串模式,用于描述字符串的结构或格式。它可以用来匹配、验证和提取字符串中的某些模式。在CAD二次开发软件LISP中,正则表达式可以用于文本编辑,例如,提取字符串中的特定模式、替换字符串中...
根据提供的文件信息,我们可以归纳出一系列与正则表达式相关的知识点。这些知识点涵盖了不同类型的正则表达式的构建方法及其用途,对于理解和应用正则表达式非常有帮助。 ### 正则表达式概述 正则表达式(Regular ...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它们在计算机科学中扮演着重要角色,特别是在编程语言、文本编辑器和搜索引擎中。正则表达式通常简称为“regex”或“regexp”,可以...
#### 一、正则表达式概述 正则表达式是一种强有力的模式匹配工具,广泛应用于各种编程语言中,用于文本处理。正则表达式允许用户定义复杂的查找模式,这对于数据验证、搜索和替换操作特别有用。 #### 二、基本概念...