我想编写一个正则表达式来匹配包含在 * 字符中的字符串,就像 markdown 使用它们来** 使事情变得粗体**一样。
但我也希望开头和结尾的 * 数量是可变的。星星的数量将等于该字符串的重要性。
目前我正在使用这个;
/(\*\*\*|\*\*|\*)(.*?)\1/
这适用于最多 *** 三*** 任何一方。这将返回 * 之间的字符串和包含 *** 的字符串。然后我计算该字符串的长度以获得 * 的数量。
在红宝石中,这看起来像;
"*this is important*, but this is ***very important***.scan(/(\*\*\*|\*\*|\*)(.*?)\1/).each do |match|
points << { :str => match[1], :importance => match[0].length }
end
正则表达式在大多数情况下都可以正常工作,但是如果我想获得 ******** 一些非常重要的东西********;表达会有点失控——按照我目前的方式来做。
我知道我当前的模式是搜索一定数量的 * 并在该字符串与同一字符串的另一次出现之间查找文本。但是考虑人为错误也很好,比如像这样的字符串;
**这很重要*,但***这真的很重要****。
谢谢大家!