正则表达式工具 |
grep |
语言和函数库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
本网站更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式范例 |
正则表达式参考 |
替换字符串参考 |
XRegExp JavaScript 正则表达式函数库
XRegExp 是由 Steven Levithan 开发的开源 JavaScript 函数库。它支持所有现代浏览器,以及许多较旧甚至古老的浏览器版本。它也可以在服务器上使用 Node.js。您可以在 xregexp.com 下载 XRegExp。
使用 XRegExp 对象取代 JavaScript 内置的 RegExp 对象,可以提供具备更多功能且跨浏览器差异较少的正则表达式语法。添加的显著功能包括 自由间距、命名截取、模式修改器 和 Unicode 类别、区块和脚本。它也会将无效的转义字符和不存在的反向引用视为错误。
XRegExp 也提供自己的 replace()
方法,其替换文本语法已使用 命名反向引用 增强,且没有跨浏览器差异。它也提供完全符合 JavaScript 标准的 split()
方法。
要使用 XRegExp,首先使用 var myre = XRegExp('regex', 'flags')
创建一个正则表达式对象,其中 flags 是字母 g
(全域)、i
(不分大小写)、m
(锚点 在换行符号处比对)、s
(点 比对换行符号)、x
(自由间距)和 n
(明确截取)的组合。XRegExp 3 添加 A
(星体)旗标,在比对 Unicode 属性和区块时,会包含 U+FFFF 之外的 Unicode 字符。ECMAScript 6 旗标 y
(黏着)和 u
(Unicode)也可以用在原生支持这些旗标的现代浏览器中,但如果浏览器没有内置支持这些旗标,就会掷回错误。
然后你可以将创建的 XRegExp 运行个体传递给各种 XRegExp 方法。请务必按照以下所示进行调用,才能获得完整的 XRegExp 功能。XRegExp 构造函数传回的对象是原生 JavaScript RegExp 对象。该对象的方法是浏览器内置的 RegExp 方法。你可以通过调用 XRegExp.install('natives')
来使用 XRegExp 的方法取代内置的 RegExp 方法。这么做也会影响由一般 RegExp 构造函数或双斜线正则表达式字面值创建的 RegExp 对象。
XRegExp.test(str, regex, [pos=0], [sticky=false])
测试 regex 是否可以比对字符串的一部分。pos
参数是字符串中比对尝试应开始的从 0 开始的索引。如果你传递 true
或 'sticky'
给 sticky
参数,则只会在 pos
尝试比对。这类似于在其他风格中将 开始尝试锚点 \G
(XRegExp 不支持)添加到 regex 的开头。
XRegExp.exec(str, regex, [pos=0], [sticky=false])
的功能与 XRegExp.test()
相同,但会传回 null
或数组,而不是 false
或 true
。数组中的索引 0 保存整体 regex 比对。索引 1 和之后的索引保存由捕获组比对的文本(如果有)。如果 regex 有命名捕获组,则其比对会在 XRegExp 4 及之前版本中作为数组上的属性提供。在 XRegExp 5 中,数组有一个 group
属性,该属性会将捕获组的名称作为属性。XRegExp.exec()
不依赖 lastIndex
属性,因此可以避免与该属性相关的跨浏览器问题。
XRegExp.forEach(str, regex, callback)
可以轻松地反复运行字符串中 regex 的所有比对。它会反复运行所有比对,而不论 global
旗标和 lastIndex
属性。会使用四个参数调用 callback。前两个是类似 exec()
传回的数组,以及比对在字符串中开始的索引。最后两个是 str
和 regex
,与你传递给 forEach()
的内容完全相同。
XRegExp.replace(str, regex, replacement, [scope])
传回一个字符串,其中 str
中 regex
的比对已用 replacement
取代。传递 'one'
或 'all'
作为 scope
参数,以只取代第一个比对或所有比对。如果你省略 scope 参数,则 regex.global
旗标会决定是否只取代第一个或所有比对。
「XRegExp.replace()
」方法使用自己的替换文本语法。它与原生 JavaScript 语法非常相似。它在某种程度上不兼容,会将无法形成有效替换代码的美元符号视为错误。但好处是它消除了所有浏览器间的不一致性。 $$
会插入一个单一的文本美元符号。 $&
和 $0
会插入 整体正则表达式比对。 $`
和 $'
会插入正则表达式比对左右两侧的 主旨字符串部分。 $n
、$nn
、${n}
和 ${nn}
是 编号反向引用,而 ${name}
是 命名反向引用。
如果你传递一个函数作为 replacement
参数,则会以三个或更多参数调用它。第一个参数是已比对的字符串,其中命名的捕获组可通过该字符串上的属性取得。第二个和后续参数是正则表达式中每个捕获组比对到的字符串(如果有的话)。最后两个参数是找到比对的字符串索引和原始主旨字符串。
XRegExp.split(str, regex, [limit])
是 String.prototype.split
的替代方案。它精确遵循 JavaScript 的字符串分割标准,消除了所有浏览器间的不一致性和错误。