javascript - 正则表达式:匹配下划线包裹的单词,除非它们以@/#开头

标签 javascript regex markdown tiptap

我正在尝试解决 this bug在 Tiptap(Vue 的 WYSIWYG 编辑器)中,通过传入自定义正则表达式,以便标识 Markdown 中斜体符号的正则表达式 ( _value_ ) 不会应用于以 @ 开头的字符串。或# ,例如#some_tag_value不会被转换成#some标签值。

这是我到目前为止的正则表达式 - /(^|[^@#_\w])(?:\w?)(_([^_]+)_)/g
编辑:在 @ Wiktor Stribiżew /(^|[^@#_\w])(_([^_]+)_)/g 的帮助下新的正则表达式

虽然它满足了大多数常见情况,但目前在以下情况下仍然会失败 下划线位于单词中间,例如ant_farm_ 应该匹配 (antfarm)

我在这里还提供了一些“应该匹配”和“不应该匹配”的情况https://regexr.com/50ibf为了更容易测试

应匹配(下划线之间)

_italic text here_
police_woman_
_fire_fighter
a thousand _words_
_brunch_ on a Sunday

不应匹配

@ta_g_
__value__
#some_tag_value
@some_value_here
@some_tag_
#some_val_
#_hello_

最佳答案

您可以使用以下模式:

(?:^|\s)[^@#\s_]*(_([^_]+)_)

请参阅regex demo

详细信息

  • (?:^|\s) - 字符串或空格的开头
  • [^@#\s_]* - 0 个或多个除 @#_ 之外的字符> 和空格
  • (_([^_]+)_) - 第 1 组:_,除 _ 之外的 1 个以上字符(捕获到第 2 组),然后是 _

关于javascript - 正则表达式:匹配下划线包裹的单词,除非它们以@/#开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735827/

相关文章:

regex - 使用 xslt 将简单的 markdown(string) 转换为 html

javascript - Vaadin JavaScript API 集成

javascript - jquery 变量似乎在第一次单击后永远不会被设置

javascript - 是否可以设置跨域 iframe 内容的样式?

c# - 在 C# 中,如何使用 Regex.Replace 添加前导零(如果可能)?

javascript - 如何使用 Webpack 在 JavaScript 中导入 Frontmatter 和 Markdown

javascript - 使用 mapStateToProps 连接到 redux 存储的确认模式给出错误

php - 设置电话号码格式

c# - 如何在您的应用程序中找到递归?

javascript - 如何在 Jekyll 3 中为 rouge 指定自定义语言解析器别名?