我正在尝试解决 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/