Javascript 是否可以使用正则表达式在分隔符对之间查找文本

Javascript 是否可以使用正则表达式在分隔符对之间查找文本,javascript,regex,parsing,text-parsing,Javascript,Regex,Parsing,Text Parsing,我需要为出现在成对美元符号之间的自定义变量解析电子邮件模板,例如: $foo$bar$baz$foo$bar$baz$wtf 因此,我想首先提取上面的“foo”,因为它位于第一对美元符号(第一和第二)之间。然后跳过“bar”,但在下一对(第3和第4)美元符号之间提取“baz” 我可以用下面的split和filter来实现这一点,但是我想知道,是否有一种方法可以用正则表达式来实现同样的功能?我假设可以使用某种形式的解析器,递归的或其他的,但在我看来,这似乎有些过分了 const body = "

我需要为出现在成对美元符号之间的自定义变量解析电子邮件模板,例如:

$foo$bar$baz$foo$bar$baz$wtf
因此,我想首先提取上面的“foo”,因为它位于第一对美元符号(第一和第二)之间。然后跳过“bar”,但在下一对(第3和第4)美元符号之间提取“baz”

我可以用下面的
split
filter
来实现这一点,但是我想知道,是否有一种方法可以用正则表达式来实现同样的功能?我假设可以使用某种形式的解析器,递归的或其他的,但在我看来,这似乎有些过分了

const body = "$foo$bar$baz$foo$bar$baz$wtf";
let delimitedSegments = body.split('$');

if (delimitedSegments.length % 2 === 0) {
  // discard last segment when length is even since it won't be followed by the delimiter
  delimitedSegments.pop();
}

const alternatingDelimitedValues = delimitedSegments.filter((segment, index) => {
  return index % 2;
});
console.log(alternatingDelimitedValues);
输出:['foo','baz','bar']


代码也在:

只需在regexp中匹配分隔符两次

const body=“$foo$bar$baz$foo$bar$baz$wtf”;
const result=body.match(/\$[^$]*\$/g).map(s=>s.replace(/\$/g.));

控制台日志(结果)只需在regexp中匹配分隔符两次

const body=“$foo$bar$baz$foo$bar$baz$wtf”;
const result=body.match(/\$[^$]*\$/g).map(s=>s.replace(/\$/g.));

控制台日志(结果)
您可以使用这个正则表达式
/\$\w+\$/g
来获得预期的输出'

let regex=/\$\w+\$/g;
设str='$foo$bar$baz$foo$bar$baz$wtf';
让result=str.match(regex).map(item=>item.replace(/\$/g');

控制台日志(结果)
您可以使用这个正则表达式
/\$\w+\$/g
来获得预期的输出'

let regex=/\$\w+\$/g;
设str='$foo$bar$baz$foo$bar$baz$wtf';
让result=str.match(regex).map(item=>item.replace(/\$/g');

控制台日志(结果)很好,我想它必须与匹配$后跟非-$有关,就像你所做的一样,除了我忘记了全局标志,它在regex101中默认是打开的。我认为这是一个很好的规范问答,因为我在谷歌搜索时没有发现任何问题。很好,我想这将与匹配$后跟非$有关,就像你所做的一样,只是我忘记了全局标志,它在regex101中默认打开。我认为这是一个很好的规范问答,因为我在谷歌搜索时并没有发现任何关于这一点的东西。