正则表达式,不匹配括号里面的字符

振星 2013-11-01 10:54:13
一个字符串如下: (12P33)P(P23&P).
期望效果只能匹配 不在括号里面的P ,在括号里面的所有P都认为不符合条件,求思路 谢谢
在线等
...全文
734 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
001007009 2013-11-01
  • 打赏
  • 举报
回复
<script>
	var s = '(12P33)P(P23&P)';
	var r1 = /\(.*?\)/g, r2 = /#\$(\d+)\$#/g, i = 0, a = [];
	s = s.replace(r1, function($){
		a.push($);
		return '#$'+ (i++) +'$#';
	})
	s = s.replace(/p/ig, '你要替换的');
	s = s.replace(r2, function($, $1){
		return a[$1];
	});
	alert( s )
</script>
先把括号内的“隐藏”了,再来替换括号外的p,最后把隐藏的再显示出来
wucl111 2013-11-01
  • 打赏
  • 举报
回复
引用 1 楼 calmcrime 的回复:
<script>
	var s = '(12P33)P(P23&P)';
	var r1 = /\(.*?\)/g, r2 = /#\$(\d+)\$#/g, i = 0, a = [];
	s = s.replace(r1, function($){
		a.push($);
		return '#$'+ (i++) +'$#';
	})
	s = s.replace(/p/ig, '你要替换的');
	s = s.replace(r2, function($, $1){
		return a[$1];
	});
	alert( s )
</script>
先把括号内的“隐藏”了,再来替换括号外的p,最后把隐藏的再显示出来
1樓已經給出了很好的解決方案. 不過當:var s = '(12P33)#$0$#P(P23&P)'時會出現問題; 這種情況很少,但也可能出現; 建議:

var s = '(12P33)#$0$#P(P23&P)';
		var r1 = /\(.*?\)/g, r2 = /\((\d+)\)/g, i = 0, a = [];
		s = s.replace(r1, function($){
			a.push($);
			return '('+ (i++) +')';
		});
		s = s.replace(/p/ig, '你要替换的');
		s = s.replace(r2, function($, $1){
			return a[$1];
		});
		alert( s )
oggmm 2013-11-01
  • 打赏
  • 举报
回复
先将括号的内容去掉后在去匹配P就可以了
nfer_cn 2013-11-01
  • 打赏
  • 举报
回复
我假定,你要把匹配的P全部都替换成Q,代码如下:

<script>
    var s = '(12P33)P(P23&P)';
    var r1 = /(\(.*?\))*P(\(.*?\))*/g
    s = s.replace(r1, "Q")
    alert( s )
</script>

87,907

社区成员

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

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