正则表达式匹配Markdown代码块

4

我有以下字符串:

`example.com` foo bar `baz`

需要被替换成:
<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>')

结果为:

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

期望结果:

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

你是否也想能够转义反引号?(例如使用\`)当使用正则表达式时,转义会变得棘手(甚至不可能)。 - slartidan
1
不,让我们保持简单。 - julesbou
2个回答

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);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接