在JS中使用reguar exprssions和sticky flag匹配多行字符串

时间:2017-07-28 20:00:07

标签: javascript regex

我正在尝试使用以下模式匹配多行字符串: $ [任何字符] $$ [任何字符] $ 这可以以任何字符开头,后跟任意数量的字符。 即使[任何字符]

中有新行,它也应匹配

到目前为止我所做的是:

/\$.*\$\$.*\$/myg

如果它在开始时找到了正确的匹配,并且如果我在第一次匹配后添加一个$而不是我需要从y(粘性标记)添加一个$,则添加整行。 另外,即使我添加了正确的标志,这也不会匹配新行中的任何内容。

我还想找到每个匹配的索引并将整个匹配存储在一个数组中以处理它并找到[任何字符]并将整个匹配替换为它的第一部分。

我会对任何提示或指导感到满意。 提前谢谢

1 个答案:

答案 0 :(得分:2)

您似乎需要将$后跟$以外的任何字符匹配到$$子字符串,然后再将$以外的任何字符匹配到第一个$。使用

/\$[^$]*\$\$[^$]*\$/g

请参阅regex demo

请注意,m修饰符在此处不执行任何操作,因为模式中没有^$锚点。 m会使^匹配行的开头而不是字符串的开头,$将匹配行的结尾。 y粘性修饰符只会使当前RegExp.lastIndex的正则表达式匹配一次,因此要获取所有匹配项,您需要将其删除并使用g。见this RegExp.prototype.sticky reference

  

定义为stickyglobal的正则表达式会忽略global标记。

模式详情

  • \$ - 一个$字符
  • [^$]* - 除$
  • 以外的0个字符
  • \$\$ - 两个连续的$符号
  • [^$]* - 除$
  • 以外的0个字符
  • \$ - $