javascript - 请教一个正则表达式分组替换的问题
PHP中文网
PHP中文网 2017-04-11 12:19:27
[JavaScript讨论组]

我想过滤下面几种格式的文件:

  1. fileName.ext'

  2. fileName.ext"

  3. fileName.ext?md5'

  4. fileName.ext?md5"

统一替换为
fileName.ext?newmd5' or fileName.ext?newmd5"

目前正则写好了,但是我需要获取他结尾时候用的是'还是"时碰到了问题:

我的正则表达式如下(sg可能有转义处理,就直接塞到到代码了,代码高亮请忽略):

fileName.ext(['"]|\?[0-9a-zA-Z]*?(['"]))

分组是提取出来了,但是因为使用了分支,存储'or"的分组可能是第1组or第3组(从0组开始)
但是后面用js replace的时候,需要$1 or $3,但是不确定,所以不清楚哪个分支。

这种情况应该怎么处理呢?

我有另外一种方式是从开头的字符串匹配。

(['"]).*?filename.ext(\1|\?[0-9-a-zA-Z]*?\1)

有没有什么更好的方法吗?比如不改变原先正则的情况下,选择需要的分组?或者在原正则上简单修改下,能实现?谢谢大家~

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHPz
/fileName.ext(\?\w+)?(['"])/

可以这样来分组

巴扎黑
var files = [
  'fileName.ext\'',
  'fileName.ext"',
  'fileName.ext?md5\'',
  'fileName.ext?md5"'
];
news = files.map(function(str){
  return str.replace(/(fileName\.ext)(\?[0-9a-zA-Z]*?)?(?=['"])/g,"$1?newMD5");
})
console.log(news)
// fileName.ext?newMD5'
// fileName.ext?newMD5"
// fileName.ext?newMD5'
// fileName.ext?newMD5"
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号