我的markdown实现将双连字符转换为分隔符。例如,一个 - B成为一个 - B将连字符转换为双连字符的正则表达式
但有时用户写一个 - B时,他们的意思是一个 - B。我想要一个正则表达式来解决这个问题。
很明显body.gsub(/ - /, " -- ")
想到了,但这样做会降低降价的无序列表 - 即如果一条线开始- list item
,它将变为-- list item
。因此,解决方案必须只换出连字符时,有一个单词字符某处左手
我的markdown实现将双连字符转换为分隔符。例如,一个 - B成为一个 - B将连字符转换为双连字符的正则表达式
但有时用户写一个 - B时,他们的意思是一个 - B。我想要一个正则表达式来解决这个问题。
很明显body.gsub(/ - /, " -- ")
想到了,但这样做会降低降价的无序列表 - 即如果一条线开始- list item
,它将变为-- list item
。因此,解决方案必须只换出连字符时,有一个单词字符某处左手
可以匹配一个单词字符连字符的左侧,使用替换字符串中的逆向引用把它放回去:
body.gsub(/(\w) - /, '\1 -- ')
也许,如果你想多一点接受...
gsub(/\b([ \t]+)-(?=[ \t]+)/, '\1--')
\ b [\ t]强制通过一个单词边界条件的空白之前非whitepace。我不使用\ s来避免线路运行。我也只使用一个捕获来保存前面的空格(Ruby 1.8.x有没有?<=
?)。
这个正则表达式对yjerem的(简单的)答案有什么好处? – 2010-08-09 16:19:47
@Horace它接受更多并保留输入的空格(空格或制表符)。例如:“Hello \ t \ t- world!”将会变成“Hello \ t \ t--世界!”,这可能会或可能不合意。 – 2010-08-10 18:43:53
你还打了一个\ s?在那里照顾有没有空间: (\ w)\ s? - – 2010-07-20 01:58:07