快速入门
教程
工具和语言
示例
参考
书评
正则表达式工具
grep
PowerGREP
RegexBuddy
RegexMagic
通用应用程序
EditPad Lite
EditPad Pro
语言和库
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 模式
Xojo
XQuery 和 XPath
XRegExp
数据库
MySQL
Oracle
PostgreSQL
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于本网站
RSS 源和博客
RegexBuddy—The best regex editor and tester for XRegExp developers!

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 参数是字符串中匹配尝试应开始的以零为基的索引。如果您为 sticky 参数传递 true'sticky',则仅在 pos 处尝试匹配。这类似于在其他风格中将尝试开始锚点 \G(XRegExp 不支持)添加到 regex 的开头。

XRegExp.exec(str, regex, [pos=0], [sticky=false])XRegExp.test() 相同,但返回 null 或数组,而不是 falsetrue。数组中的索引 0 保存了整体 regex 匹配。索引 1 及以后保存了捕获组(如果有)匹配的文本。如果 regex 具有命名的捕获组,那么它们的匹配在 XRegExp 4 及更早版本中作为数组上的属性提供。在 XRegExp 5 中,数组具有 group 属性,该属性具有捕获组的名称作为属性。XRegExp.exec() 不依赖于 lastIndex 属性,因此避免了该属性的跨浏览器问题。

XRegExp.forEach(str, regex, callback) 可以轻松遍历字符串中 regex 的所有匹配项。它始终遍历所有匹配项,而不管 global 标志和 lastIndex 属性。回调使用四个参数调用。前两个是类似于 exec() 返回的数组和匹配开始的字符串中的索引。最后两个是 strregex,与您传递给 forEach() 的完全相同。

XRegExp.replace(str, regex, replacement, [scope]) 返回一个字符串,其中 regexstr 中匹配的内容被 replacement 替换。将 'one''all' 作为 scope 参数传递,以仅替换第一个匹配项或所有匹配项。如果你省略 scope 参数,则 regex.global 标志将确定是否仅替换第一个匹配项或所有匹配项。

XRegExp.replace() 方法使用自己的替换文本语法。它与原生 JavaScript 语法非常相似。它通过使不形成有效替换标记的美元符号成为错误,在某种程度上不兼容。但好处是它消除了所有跨浏览器的差异。$$ 插入一个单一的文字美元符号。$&$0 插入整体 regex 匹配项$`$' 插入 regex 匹配项左侧和右侧的主题字符串部分$n$nn${n}${nn}编号反向引用,而 ${name}命名反向引用

如果你将一个函数作为 replacement 参数传递,那么它将使用三个或更多参数调用。第一个参数是匹配的字符串,可以通过该字符串上的属性使用命名的捕获组。第二个及后续参数是 regex 中每个捕获组匹配的字符串(如果存在)。最后两个参数是找到匹配项的字符串中的索引和原始主题字符串。

XRegExp.split(str, regex, [limit])String.prototype.split 的替代方法。它准确遵循 JavaScript 的字符串拆分标准,消除了所有跨浏览器的差异和错误。

| 快速开始 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| 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 |