2016-01-23 89 views
1

我有一个字符串,其中有几个“\\”,其中一些我想选择使用正则表达式去除,其他不是。更确切的说,我想删除所有“\\”里面没有[...]所以对于字符串使用正则表达式选择

var string1 = "[1 & 2 \\ 1 & 2] \\ [1 & 2 \\ 1 & 2 ]"; 
var string2 = "a{b}_{c} \\ [1 & 2 \\ 1 & 2 \\ 1 & 2 ]"; 
var string3 = "[1 & 2 \\ 1 & 2 \\ 1 & 2 ] \\ \text{foo}"; 

有没有选择“\\”,在”一个正则表达式..] \\ [..“in string1,”..} \\ [..“in string2 and”..] \\ \ te ..“?通常在“\\”之前和之后可以有任何符号,主要区别在于我只想选择那些不在括号内的符号。

+0

是[和]拼图?如果是这样,那么你正在离开正则表达式的可能性(不再是一个普通的语法),你需要一些更高级的解析器。 –

+0

没有[和]不会显示为[[]]或[[]或[]] –

+0

没有您当前的代码,我认为这是不可能的,因为“选择”不明确。正则表达式只搜索匹配。而正则表达式的风格因发动机而异。 –

回答

1

这就需要在使用lookbehinds量词(*+)排除像\[[^]]*图案(这意味着它已经左方括号随后除右方括号任何数量的字符前),但在lookbehinds量词是不可能的。

因此,也许你会发现在你的字符串不同的模式 - 例如,如果这些对/从不后面加一个空格和数字,而那些在括号内始终是,你可以这样做:

\\{2}(?!\s\d) 

Demo here

+0

这并没有回答原来的问题,但似乎我可以事先修改字符串以匹配您的正则表达式。谢谢! –