javascript正则表达式是什么_如何匹配和提取字符串
发布时间 - 2026-01-08 00:00:00 点击率:次JavaScript正则表达式是RegExp对象而非字符串,字面量(如/\d+/)与构造函数(new RegExp('\\d+'))转义规则不同;test()判断、exec()提取单个(支持捕获组)、match()提取全部(全局时丢失捕获组)。
JavaScript 正则表达式是什么?它不是字符串,是 RegExp 对象
JavaScript 中的正则表达式本质是一个 RegExp 实例,不是普通字符串。虽然可以用字面量写成 /\d+/,也可以用构造函数 new RegExp('\\d+'),但两者在转义和动态构建时行为不同——尤其注意:构造函数的 pattern 参数是字符串,反斜杠需双写,而字面量里单写即可。
常见误解是把 /\d+/ 当作“字符串”,结果在拼接动态内容时出错。比如想匹配用户输入的关键词 keyword,写成 new RegExp('/' + keyword + '/g') 就完全错了——/ 在字符串里只是字符,不会触发正则语法,正确写法是 new RegExp(keyword, 'g')。
用 test()、exec() 和 match() 区分「判断」「提取单个」「提取全部」
三个最常用方法用途明确,混用容易漏数据或报错:
-
test()只返回true/false,适合做条件判断,比如表单校验:/^[a-z0-9_]+$/i.test(username) -
exec()每次只返回第一个匹配及其捕获组(含index、input等属性),全局模式下需循环调用;不加g标志会反复返回第一个结果 -
match()对非全局正则返回数组(含捕获组),对全局正则只返回纯匹配字符串数组,**丢失捕获组信息**;想拿捕获组又需要全部匹配,必须用exec()循环
const str = 'price: $12.99, qty: 5';
const re = /(\w+): \$?(\d+\.\d+)/g;
let result;
while ((result = re.exec(str)) !== null) {
console.log('字段:', result[1], '值:', result[2]);
}
// 输出:字段: price 值: 12.99 → 字段: qty 值: 5
g、i、m 标志的实际影响远不止“全局”“忽略大小写”
标志改变的是正则引擎的匹配逻辑,不是简单开关:
立即学习“Java免费学习笔记(深入)”;
-
g让lastIndex生效,影响exec()和replace()的多次执行;但match()加不加g返回结构完全不同 -
i不仅匹配 ASCII 字母,还覆盖 Unicode 字母(如中文拼音、德语变音符),但对汉字、数字无影响 -
m只有在正则中用了^或$时才起作用——它让这两个锚点匹配每行开头/结尾,而不是整个字符串首尾;没用^/$时加m完全无感
典型陷阱:/^error/i.test('ERROR: timeout') 返回 true,但 /^error/im.test('line1\nERROR: timeout') 仍返回 false,因为换行后 ERROR 不在行首(前面有 \n)。
提取 URL 中的协议、域名、路径,别硬写 split() 或 indexOf()
用正则提取结构化 URL 比手撕字符串更稳,关键是合理使用非贪婪和字符组:
const url = 'https://api.example.com/v1/users?id=123#top';
const match = url.match(/^(\w+):\/\/([^/]+)(\/[^?#]*)?/);
if (match) {
console.log('协议:', match[1]); // https
console.log('域名:', match[2]); // api.example.com
console.log('路径:', match[3] || '/'); // /v1/users
}
注意点:
-
[^/]+比.*?更安全,避免跨到路径部分 -
\/[^?#]*显式排除查询参数和 hash,比\/.*精确 - 括号必须成对,空路径用
(...)?并检查match[3]
是否为 undefined
真正难的不是写出正则,而是想清楚边界——比如是否允许端口、IPv6 地址、带用户信息的 URL(user:pass@host)。简单场景够用,复杂需求建议用 URL 构造函数解析。
# javascript
# word
# java
# 正则表达式
# ipv6
# 端口
# 字符串数组
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS7中新建站点?详细步骤解析
Laravel PHP版本要求一览_Laravel各版本环境要求对照
如何挑选最适合建站的高性能VPS主机?
如何在IIS管理器中快速创建并配置网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何在云指建站中生成FTP站点?
Laravel怎么实现验证码(Captcha)功能
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Laravel如何实现API速率限制?(Rate Limiting教程)
北京专业网站制作设计师招聘,北京白云观官方网站?
,南京靠谱的征婚网站?
北京网站制作的公司有哪些,北京白云观官方网站?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
java获取注册ip实例
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Python自动化办公教程_ExcelWordPDF批量处理案例
jQuery中的100个技巧汇总
轻松掌握MySQL函数中的last_insert_id()
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何用西部建站助手快速创建专业网站?
*服务器网站为何频现安全漏洞?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
免费视频制作网站,更新又快又好的免费电影网站?
Python文件流缓冲机制_IO性能解析【教程】
如何在建站宝盒中设置产品搜索功能?
重庆市网站制作公司,重庆招聘网站哪个好?
如何快速使用云服务器搭建个人网站?
Linux系统命令中tree命令详解
Android利用动画实现背景逐渐变暗
高防服务器租用如何选择配置与防御等级?
JS弹性运动实现方法分析
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
在线制作视频的网站有哪些,电脑如何制作视频短片?
Bootstrap整体框架之CSS12栅格系统
微信小程序 scroll-view组件实现列表页实例代码
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
上一篇:linux 用户id是什么意思
上一篇:linux 用户id是什么意思


是否为