我正在尝试使用以下模式匹配多行字符串: $ [任何字符] $$ [任何字符] $ 这可以以任何字符开头,后跟任意数量的字符。 即使[任何字符]
中有新行,它也应匹配到目前为止我所做的是:
/\$.*\$\$.*\$/myg
如果它在开始时找到了正确的匹配,并且如果我在第一次匹配后添加一个$而不是我需要从y(粘性标记)添加一个$,则添加整行。 另外,即使我添加了正确的标志,这也不会匹配新行中的任何内容。
我还想找到每个匹配的索引并将整个匹配存储在一个数组中以处理它并找到[任何字符]并将整个匹配替换为它的第一部分。
我会对任何提示或指导感到满意。 提前谢谢
答案 0 :(得分:2)
您似乎需要将$
后跟$
以外的任何字符匹配到$$
子字符串,然后再将$
以外的任何字符匹配到第一个$
。使用
/\$[^$]*\$\$[^$]*\$/g
请参阅regex demo
请注意,m
修饰符在此处不执行任何操作,因为模式中没有^
和$
锚点。 m
会使^
匹配行的开头而不是字符串的开头,$
将匹配行的结尾。 y
粘性修饰符只会使当前RegExp.lastIndex
的正则表达式匹配一次,因此要获取所有匹配项,您需要将其删除并使用g
。见this RegExp.prototype.sticky
reference:
定义为
sticky
和global
的正则表达式会忽略global
标记。
模式详情
\$
- 一个$
字符[^$]*
- 除$
\$\$
- 两个连续的$
符号[^$]*
- 除$
\$
- $
。