2013-02-28 82 views
0

考虑:正则表达式,按键之间提取文本

This is some text which could have 
line breaks and tabs before and after {code} 
and I want them {code} to be replaced {code}in pairs{code} without any issues. 

我想:

This is some text which could have 
line breaks and tabs before and after <code> 
and I want them </code> to be replaced <code>in pairs</code> without any issues. 

的jsfiddle:http://jsfiddle.net/egrwD/1

简单的工作文字样本:

var sample1 = 'test test test {code}foo bar{code} {code}good to know{code}'; 
var regEx1 = new RegExp('(\{code\})(.*?)(\{code\})', 'gi'); 
var r1 = sample1.replace(regEx1, '<code>$2</code>'); 

给出:

test test test <code>foo bar</code> <code>good to know</code> 

非工作示例:

var sample2 = 'test test test {code}\tfoo bar{code} {code}\r\ngood to know{code}'; 
var regEx2 = new RegExp('(\{code\})(.*?)(\{code\})', 'gi'); 
var r2 = sample2.replace(regEx2, '<code>$2</code>'); 

给出:

test test test {code} foo bar{code} {code} 
good to know{code} 

回答

1

看起来LIK Ë你只需要make the pattern match across line breaks,正确逃生,首先{,并用文字正则表达式来解决字符串中需要双反斜线逃生:你甚至不

/(\{code\})([\s\S]*?)(\{code\})/gi 

http://jsfiddle.net/mattball/QNak5

注需要围绕{code} S中捕获括号:

/\{code\}([\s\S]*?)\{code\}/gi 

http://jsfiddle.net/mattball/Jk5cr

+0

ŧ汉克斯!诀窍了。对我来说足够了。 – Daniel 2013-02-28 23:04:11

+0

不适用于空格:'{code}'。 – yckart 2013-03-18 01:09:20

+0

@yckart,OP中没有任何内容表明它需要。 – 2013-03-18 01:48:23