【问题标题】:Regex to remove spaces inside markdown link正则表达式删除降价链接内的空格
【发布时间】:2021-05-29 10:11:30
【问题描述】:

我需要一种方法来删除 Markdown 格式链接中的空格

[uber](https://eng.uber.com/how-uber-deals-with-large-ios-app- size/)

正则表达式应该匹配空格并允许我删除它。尝试过

/\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*<?((?:[^\s\\]|\\.)*?)>?(\s)+(?:\s+['"]([\s\S]*?)['"])?\s*\)/gi

但不工作。

游乐场:https://regexr.com/5neku

【问题讨论】:

  • 只需使用\s,它会获取字符串中的每个空格。
  • 您使用的是什么编程语言(或正则表达式风格)?
  • @dahiya_boy 这将在标题部分捕获空格字符,我认为 OP 不希望发生这种情况。
  • Python 或 JS @41686d6564

标签: javascript python regex


【解决方案1】:

你可能会使用:

(\[[^][]+\])\(([^()]+)\)

查找格式为[...](...)的内容。
这与Python 中的replacer 函数相结合可能类似于:

import re

text = """
lorem ipsum dolor sit 
[uber](https://eng.uber.com/     how-uber      -deals-with-large-ios-app- size/)
lorem dolor
"""

# here comes the fun
def replacer(match):
    replaced = re.sub(r'\s+', '', match.group(2))
    return "{}({})".format(match.group(1), replaced)
    
rx = re.compile(r'(\[[^][]+\])\(([^()]+)\)')

text = rx.sub(replacer, text)
print(text)

参见a demo for the expression on regex101.com 和ideone.com 上的脚本本身。


如果您想深入了解正则表达式的美丽世界,而不仅仅是完成您的工作,您可以使用以下表达式,该表达式仅由较新的 regex 模块支持:

(?:\G(?!\A)|\[[^][]+\]\()[^\s()]+\K\s+

这会查找类似[...]( 的内容,然后在每个空格或) 处停止,从而有效地将搜索限制在括号内。见a demo on regex101.com。

【讨论】:

    【解决方案2】:

    捕获链接更容易,分成[...]和(..)然后替换空格

    var links = `[uber](https://eng.uber.com/how-uber-deals-with-large-ios-app- size/)
    [other link](https://eng.uber.com/    other-link)`
    
    var m, regex = /(\[.*?\])(\(.*?\))/g;
    
    while ((m = regex.exec(links)) !== null) {
      var UrlNoSpace = m[2].replace(/\s+/g, '')
      links = links.replace(m[1] + m[2], m[1] + UrlNoSpace)
    }
    
    console.log(links)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 2014-06-17
      • 2011-11-01
      • 2012-11-15
      • 2020-08-04
      • 2021-08-28
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多