js 正则表达式 匹配

小丑的帽子
  • 101
已知数据为___(1)___rcos(a+b)___(1)___测试转换___(1)___
求正则表达式转换为___(1)___rcos(a+b)___(2)___测试转换___(3)___

根据下划线和括号为开始结尾标识,其他包含括号的不需要转

回复
阅读 764
3 个回答
✓ 已被采纳

// => 已知数据为___(1)___rcos(a+b)___(2)___测试转换___(3)___
demo('已知数据为___(1)___rcos(a+b)___(1)___测试转换___(1)___')

function demo (str) {
  let index = 0;
  return str.replace(/(_\()(.*?)(\)_)/g, function (g, $1, $2, $3) {
    return $1 + ++index + $3
  })
}
var count = 1;

`已知数据为___(1)___rcos(a+b)___(1)___测试转换___(1)___(5)___`
  .split(/___(.*?)/)
  .map(item =>
    item.match(/\(*\)/) ? item.replace(/\(.*\)/, `(${count++})`) : item
  )
  .join("__");
// => 已知数据为___(1)___rcos(a+b)___(2)___测试转换___(3)___
demo('已知数据为___(1)___rcos(a+b)___(1)___测试转换___(1)___')

function demo (str) {
  let index = 0;
  return str.replace(/(_().*?()_)/g, function (g, $1, $2) {
    return $1 + ++index + $2
  })
}

由1楼的思路而来,如果你需要拿到中间的值做处理,还是用三个组比较好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏