Javascript 正则表达式:匹配下划线包装的单词,除非它们以@/开头#
我试图在Tiptap(Vue的WYSIWYG编辑器)中解决这一问题,方法是传入一个自定义正则表达式,以便在标记(Javascript 正则表达式:匹配下划线包装的单词,除非它们以@/开头#,javascript,regex,markdown,tiptap,Javascript,Regex,Markdown,Tiptap,我试图在Tiptap(Vue的WYSIWYG编辑器)中解决这一问题,方法是传入一个自定义正则表达式,以便在标记(_value)中标识斜体符号的正则表达式不会应用于以@或#开头的字符串,例如#某些标记_value不会转换为#sometagvalue 这是到目前为止我的正则表达式-/(^.[^@.\uw])(?:\w?(^([^.]+))/g 编辑:在@Wiktor Stribiżew/(^ |[^ ^@#w])(([^]+)g)/g的帮助下新建正则表达式 虽然它满足大多数常见情况,但当 下划线在单
_value
)中标识斜体符号的正则表达式不会应用于以@
或#
开头的字符串,例如#某些标记_value
不会转换为#sometagvalue
这是到目前为止我的正则表达式-/(^.[^@.\uw])(?:\w?(^([^.]+))/g
编辑:在@Wiktor Stribiżew
/(^ |[^ ^@#w])(([^]+)g)/g的帮助下新建正则表达式
虽然它满足大多数常见情况,但当
下划线在单词中间,例如ant_farm_u应匹配(antfarm)
我还提供了一些“应该匹配”和“不应该匹配”的案例,以便于测试
应匹配(下划线之间)
不应匹配
@ta_g_
__value__
#some_tag_value
@some_value_here
@some_tag_
#some_val_
#_hello_
就科学而言,这个怪物在Chrome(和Node.js)中工作
let text=`
应匹配(下划线之间)
_斜体文本在这里_
女警察_
_消防队员
千言万语_
_周日的早午餐
不应匹配
@塔格_
__价值观__
#一些标记值
@这里有些价值
@一些标签_
#一些_
#_你好_
`;
让re=/(?您可以使用以下模式:
(?:^|\s)[^@#\s_]*(_([^_]+)_)
见
详细信息
(?:^ |\s)
-字符串或空格的开头
[^@#\s.]*
-0个或多个字符,而不是@
、#
、
和空格
([^+)\ucode>-第1组:,1+字符,而不是(捕获到第2组),然后
这里有一点,它不像其他答案那样简洁,但我认为更容易理解发生了什么。匹配组
\3
就是您想要的
需要多行标志
^
-匹配行首
([a-zA-Z\s]+|)
-多个单词或
([a-zA-Z]+)+?
-多个单词后跟。
至少一次,但至少匹配一次
[a-zA-Z\s]*?
-最后的话
$
-行尾
总之,分解的东西要匹配其中的一个
\u
\u
\u
\u
看起来这是一个与使用同样匹配下划线的\w
有关的问题。请尝试(^ 124;[^-\\\\\w])(^([^-+))u)
,请参见。@Wiktor Stribiżew不幸的是,它与ant\u farmż不匹配,因为您在第一组中有\w
。请尝试(?:^-^-^-+\s)[^-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
,看看这是否适用于您的所有情况?只要看看捕获组1So中的值,(?:^\s)[^@#\s.]*(([^\u]+)-)
可以根据您的需要工作吗?是的,如果Firefox支持负面外观滞后,我可以使用它:(感谢您的贡献!我应该在最初的问题中提到这一点(目前仅在问题的评论中提到)我不能指定第三方组件稍后使用的匹配组。我只能覆盖的输入规则,但将有一个非常具体的匹配逻辑。对于将来遇到此问题的任何人,我现在稍微简化了它(它不再捕获一些标记值,因为我们发现Slack和其他一些与Markdown兼容的编辑器也不这样做)
(?:^^ |\s)(([^!]+))
(?:^|\s)[^@#\s_]*(_([^_]+)_)
^([a-zA-Z\s]+|_)(([a-zA-Z\s]+)_)+?[a-zA-Z\s]*?$