正则表达式:匹配两个特定符号之间每次出现的破折号

Regex: Match every occurrence of dash in between two specific symbols

我有这个字符串:](-test-word-another)

我试图在 ]) 之间找到每个出现的 - 基本上 return 应该是:](-test-word-another)

目前我有 (?<=\]\()(-)(?=\)) 但如果只有一个 -

提前致谢

试试这个:/(?<=\].*)-(?=.*\))/gm

在这里测试:https://regex101.com/r/xkmTZs/3

这基本上匹配所有 -,前提是它们出现在 ] 之后和 ) 之前。

你可以使用

text.replace(/]\([^()]*\)/g, (x) => x.replace(/-/g, '_'))

查看下面的演示:

const text = 'Word-word ](-test-word-another) text-text-.';
console.log( text.replace(/]\([^()]*\)/g, (x) => x.replace(/-/g, '_')) );

]\([^()]*\) 正则表达式匹配 ]( 子字符串,然后是 () 以外的任何零个或多个字符,然后是 ),然后然后匹配值中的所有 - 个字符(此处为 x)使用 (x) => x.replace(/-/g, '_').

替换为 _

另一个单一的正则表达式解决方案看起来像

(?<=]\((?:(?!]\()[^)])*)-(?=[^()]*\))

参见 this regex demo。它匹配紧跟在 ]( 之前的任何 - 和除 ) 之外的任何零个或多个字符,这些字符不以 ]( 字符序列开始,并且紧跟任何() 以外的零个或多个字符,然后是 ) 个字符。