请教一个 截取字符串的问题 思路想用正则表达式

「已注销」 2013-12-31 12:41:52
现有一个字符串
实例:

s="abs((a1+a4)-a5)>d8+d9";
请问 如何才能截取字符串
将 s截取为 abc (a1+a4)-a5 >d8+d9 去掉第一层 abs的括号

不了解正则表达式如何实现。。求大神帮助!万分感谢!
...全文
214 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
thy442030800 2014-01-10
  • 打赏
  • 举报
回复
当时是直觉正则无法做到,今天又看到了一篇文章,过来Mark一下: 结论:js的正则是无法做到深度嵌套的匹配的。 大多数系统中,正则表达式都无法匹配任意深度的嵌套结构。只能手动写死属于几层嵌套,比如处理单层嵌套的正则是: \([^()]*(\([^()]*\)[^()]*)*\) 在以前很长的一段时间里,都没有哪个系统做到了这个支持,不过现在Perl、.NET和PCRE/PHP都提供了解决的办法,比如Perl,以下的正则可以指定嵌套深度¥depth,它使用的是Perl的“string x count”运算符,这个运算符会把string重复count次: $regex = '\('.'(?:[^()]|\(' x $depth . '[^()]*' . '\))*' x $depth .'\)';
张运领 2013-12-31
  • 打赏
  • 举报
回复
你这得多说几种样式,才能找到一个通用的规则,你只给这一种,那给出来的正则就会很有局限性了, 你换个方式写法,再用就会出现问题的。 比如这个abs,是只要abs后面的括号去掉吗? 说的要明白一点才行哦。
_拙计 2013-12-31
  • 打赏
  • 举报
回复
abs之后第一个(,>之前第一个)
thy442030800 2013-12-31
  • 打赏
  • 举报
回复
。。。意思是那种情况我建议你自己写代码解析~我觉得这种情况用正则不太可能~
「已注销」 2013-12-31
  • 打赏
  • 举报
回复
引用 13 楼 thy442030800 的回复:
[quote=引用 12 楼 ziegler33 的回复:] [quote=引用 6 楼 thy442030800 的回复:] 用这个:

var s="abs((a1+a4)-a5)>d8+d9";
alert(s.replace(/\babs\((.*)\)/g,"abs $1 "));    //abs (a1+a4)-a5 >d8+d9
谢谢大神 就是这个效果 !万分感谢[/quote] 对了,提示一下,这个正则适合abs()作为最外围的情况,类似以下的不适用: sub(abs()); 外面又嵌套了多个的括号的情况时,正则里不好判断后面应该截取到哪个括号,建议你使用编码[/quote] 感谢提醒 如果遇到sub( abs());这种情况怎么办?编码是什么?怎么解决呢
thy442030800 2013-12-31
  • 打赏
  • 举报
回复
引用 12 楼 ziegler33 的回复:
[quote=引用 6 楼 thy442030800 的回复:] 用这个:

var s="abs((a1+a4)-a5)>d8+d9";
alert(s.replace(/\babs\((.*)\)/g,"abs $1 "));    //abs (a1+a4)-a5 >d8+d9
谢谢大神 就是这个效果 !万分感谢[/quote] 对了,提示一下,这个正则适合abs()作为最外围的情况,类似以下的不适用: sub(abs()); 外面又嵌套了多个的括号的情况时,正则里不好判断后面应该截取到哪个括号,建议你使用编码
「已注销」 2013-12-31
  • 打赏
  • 举报
回复
引用 6 楼 thy442030800 的回复:
用这个:

var s="abs((a1+a4)-a5)>d8+d9";
alert(s.replace(/\babs\((.*)\)/g,"abs $1 "));    //abs (a1+a4)-a5 >d8+d9
谢谢大神 就是这个效果 !万分感谢
「已注销」 2013-12-31
  • 打赏
  • 举报
回复
引用 10 楼 thy442030800 的回复:
[quote=引用 7 楼 MengYouXuanLv 的回复:] [quote=引用 5 楼 ziegler33 的回复:] [quote=引用 4 楼 MengYouXuanLv 的回复:]

 var s="abs((a1+a4)-a5)>d8+d9";
 alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2"));
感谢 不过试了一下 var s="abs((d7+d9))>d8+d9"; alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2")); 并没有做到 abs(d7+d9) >d8+d9 只是想去掉abs的括号 - -[/quote] 6楼正解 你的字符串有全角括号[/quote] 还以为你说我呢 往回看了一下,楼主的代码有全角 笔误吧,代码中可能全角?[/quote] 嗯 是笔误 没有全角
thy442030800 2013-12-31
  • 打赏
  • 举报
回复
引用 7 楼 MengYouXuanLv 的回复:
[quote=引用 5 楼 ziegler33 的回复:] [quote=引用 4 楼 MengYouXuanLv 的回复:]

 var s="abs((a1+a4)-a5)>d8+d9";
 alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2"));
感谢 不过试了一下 var s="abs((d7+d9))>d8+d9"; alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2")); 并没有做到 abs(d7+d9) >d8+d9 只是想去掉abs的括号 - -[/quote] 6楼正解 你的字符串有全角括号[/quote] 还以为你说我呢 往回看了一下,楼主的代码有全角 笔误吧,代码中可能全角?
allali 2013-12-31
  • 打赏
  • 举报
回复
多个括号就不符合你上述的公式
张运领 2013-12-31
  • 打赏
  • 举报
回复
var s="abs((a1+a4)-a5)>d8+d9";
var reg = /(abs)(\()((?:[^\(\)]*(?:\([^\)\(]*\))[^\(\)]*)*)(\))/g;
s = s.replace(reg,"$1$3");
allali 2013-12-31
  • 打赏
  • 举报
回复
引用 5 楼 ziegler33 的回复:
[quote=引用 4 楼 MengYouXuanLv 的回复:]

 var s="abs((a1+a4)-a5)>d8+d9";
 alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2"));
感谢 不过试了一下 var s="abs((d7+d9))>d8+d9"; alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2")); 并没有做到 abs(d7+d9) >d8+d9 只是想去掉abs的括号 - -[/quote] 6楼正解 你的字符串有全角括号
thy442030800 2013-12-31
  • 打赏
  • 举报
回复
用这个:

var s="abs((a1+a4)-a5)>d8+d9";
alert(s.replace(/\babs\((.*)\)/g,"abs $1 "));    //abs (a1+a4)-a5 >d8+d9
「已注销」 2013-12-31
  • 打赏
  • 举报
回复
引用 4 楼 MengYouXuanLv 的回复:

 var s="abs((a1+a4)-a5)>d8+d9";
 alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2"));
感谢 不过试了一下 var s="abs((d7+d9))>d8+d9"; alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2")); 并没有做到 abs(d7+d9) >d8+d9 只是想去掉abs的括号 - -
allali 2013-12-31
  • 打赏
  • 举报
回复

 var s="abs((a1+a4)-a5)>d8+d9";
 alert(s.replace(/(abs)\(([^\(]*\([^\)]*\)[^\)]*)\)/g,"$1 $2"));
「已注销」 2013-12-31
  • 打赏
  • 举报
回复
引用 2 楼 zyl_lyr1019 的回复:
你这得多说几种样式,才能找到一个通用的规则,你只给这一种,那给出来的正则就会很有局限性了, 你换个方式写法,再用就会出现问题的。 比如这个abs,是只要abs后面的括号去掉吗? 说的要明白一点才行哦。
就是 abs(......) 这样的 只要带 abs()的 ,abs那一对括号就要去掉。至于....内的内容 保持不变。。不知道这么说 清楚不。。- -

87,920

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧