记录下来,一段优美的代码。来源于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
分享到:
相关推荐
本文将用<<regex>>来表示一段具体的正则表达式。一段文本就是最基本的模式,简单的匹配相同的文本。 不同类型的正则表达式引擎 正则表达式引擎是一种可以处理正则表达式的软件。通常,引擎是更大的应用程序的一...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一种特殊的语法来描述一个字符串集合,可以非常灵活地表示各种复杂的字符串格式...
在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在C#编程语言中,正则表达式是通过System.Text.RegularExpressions命名空间中的Regex类来实现的。本篇文章将...
这段代码初始化了一个`IndexWriter`,用于创建新的索引。`new StandardAnalyzer()`表示使用标准分析器对文本进行分词处理。 2. **文档添加**: ```java Document doc1 = new Document(); Document doc2 = new ...
通过`RegExp`构造函数创建正则表达式时,需要提供两个参数:一个是正则表达式的文本内容,另一个是可选的标志,如`g`(全局匹配)、`i`(不区分大小写)和`m`(多行模式)。例如: ```javascript var re = new ...
正则式,全称为“正则表达式”,是编程领域中一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一系列特定的字符和语法构建模式,可以高效地处理各种复杂的文本匹配任务。在软件开发、数据处理、...
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。...匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff]
这个表达式的含义是:字符串必须以字母、数字、下划线、点、百分号、加号或减号开始,接着是一个@符号,然后是一段由字母、数字、点组成的内容,最后是一个点,后面跟着两个或更多的字母。 正则表达式的构成元素...
例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen...
正则表达式是一种强大的工具,能够在字符串中搜索和匹配特定模式。它可以应用于数据有效性验证、文本替换、字符串提取等方面。 正则表达式的历史可以追溯到 20 世纪 50 年代,Warren McCulloch 和 Walter Pitts 两...
为了解决这一问题,专门出现了正则表达式调试器,它能帮助开发者直观地理解正则表达式的匹配过程,从而快速定位和修复错误。 本文将围绕“Java .NET 正则表达式调试器”展开讨论,该调试器是基于.NET Framework构建...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它以简洁的方式描述复杂的字符串规律,广泛应用于编程语言、文本编辑器和各种数据分析工具中。在这个"正则表达式趣味例子集合"中,我们...
正则表达式是一种强大的文本处理工具,广泛应用于各种编程语言中,用于模式匹配、查找、替换等操作。本文档将详细介绍一系列与数字验证相关的正则表达式,旨在帮助开发者更加高效、准确地进行数字验证。 #### 二、...
标题中的“cpp-python正则表达式引擎的一个轻量级分支”指的是一个小型的、基于C++的正则表达式库,它旨在实现与Python正则表达式引擎相似的功能,但保持轻量化和低依赖性。这个库可能是从一个更大型的项目中分支...
描述:“知道perl下正则表达式的写法,与其他很多的不同”这一描述进一步强调了Perl正则表达式的独特性。Perl作为一门高度灵活且功能强大的脚本语言,在处理文本数据时尤其突出,这得益于其内置的正则表达式引擎。...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。在编程语言中,正则表达式(Regular Expression,简称regex)扮演着不可或缺的角色,它可以帮助开发者高效地处理各种字符串操作。正则...
正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,广泛应用于编程语言、文本编辑器和各种工具软件中。在IT行业中,熟练掌握正则表达式能够极大地提升对文本...
正则表达式,简称为正则,是一种强大的文本处理工具,用于匹配、查找、替换以及提取字符串中的模式。它是编程语言中的一个核心概念,被广泛应用于数据验证、文本搜索和替换等多个领域。在Java中,正则表达式是通过...
L1正则化,也称为Lasso回归,是统计学和机器学习领域中的一种重要技术,主要用于解决过拟合问题。在模型训练过程中,L1正则化通过引入惩罚项来限制模型参数的绝对值之和,从而鼓励模型选择稀疏的解。这在特征选择和...
我们来逐个解析这段正则表达式的组成部分: - `^` 表示匹配字符串的开始。 - `(?:\w+\.?)*` 匹配本地部分,其中: - `\w+` 表示匹配一个或多个单词字符(等价于[a-zA-Z0-9_])。 - `\.?` 表示匹配一个可选的点号...