2015-05-19 27 views
4

我有以下字符串:正则表达式匹配降价代码块

<code>example.com</code> foo bar <code>baz</code> 

到目前为止我使用正则表达式如下:

var str = '`example.com` foo bar `baz`' 
str.replace(/`(?:(.*$)\n)?([\s\S]*)`/gm, '<code>' + '$2' + '</code>') 

`example.com` foo bar `baz` 

需要被替换

结果于:

"<code>example.com` foo bar `baz</code>" 

预期的结果:

"<code>example.com</code> foo bar <code>baz</code>" 
+0

你是否也想逃避反引号? (例如\\')使用正则表达式时,转义会变得棘手(甚至不可能)。 – slartidan

+1

不,让我们保持简单 – julesbou

回答

3

您可以使用:

var s = '`example.com` foo bar `baz`'; 
var r = s.replace(/`([^`]+)`/g, '<code>$1</code>'); 
//=> <code>example.com</code> foo bar <code>baz</code> 
1

如前所述,你只能使用正则表达式,如果不试图实现转义字符等

这里是一个示例代码:

var s = '`example.com` foo bar `baz`'; 
 
var r = s.replace(/`(.*?)`/g, '<code>$1</code>'); 
 
window.alert("input: "+s+"\nresult: "+r);

请注意:.*?匹配器会尽量找到尽可能少的字符。它被称为非贪心