javascript - 匹配两个字符之间的所有内容,除非有空行
问题描述
我试图找到一个匹配一个或两个美元符号之间的所有内容的正则表达式模式\$.*\$|\${2}.*\${2}
,除非有一个空行(它是两个或一个,不能是这个:)\$.*\$\$
。下面,我提供了我想要匹配和想要跳过的示例。匹配应包括/排除所有内容。
我要匹配的示例:
$$ \abc + ko$$
$*-ls$
这里单个美元符号前面有一个转义字符,所以它不会破坏匹配。
$$
654a\$
$$
$123
a*/\
[]{}$
我要排除的示例:
$$
asd
$$
$asdasd$$
同样,如果它们在每一侧被一个 $ 或两个 $ 绑定,我想匹配所有内容,除非两者之间有(是)空行。
到目前为止,我想出了如何匹配单行中出现的那些,但我正在努力如何包含断线并在整行为空时排除它们。
这是我所拥有的:
^\${2}.*[^\\$]\${2}$|^\$.*[^\\$]\$$
解决方案
对于您的示例数据,您可以使用
(?<!\S)(\$\$?+)[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*(?:\r?\n(?![^\S\r\n]*$)[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*)*\1(?!\S)
解释
(?<!\S)
在左侧断言空白边界(\$\$?+)
捕获组 1,匹配 $ 或 $$ ,其中第二个是所有格(防止回溯)[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*
匹配除$
或换行符或 $ 之外的任何字符,而不是直接跟随另一个字符$
(?:
非捕获组\r?\n(?![^\S\r\n]*$)
匹配换行符,断言不是仅包含空格的行[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*
与上面相同的模式
)*
关闭组并重复0+次\1
对第 1 组中捕获的内容的反向引用(?!\S)
在右侧断言空白边界
推荐阅读
- r - 按较长的字符序列对字符进行排序(按蛋白质序列对肽进行排序)
- javascript - 暂停时引导轮播的事件
- node.js - 有没有办法将调用流式传输到 Freeswitch 上的远程 websocket 服务器?
- python - Python,不会停留在 OR 上吗?[也与 Reddit 相关]
- javascript - 在 Bootstrap 4 Carousel 单击下一步时,第一张幻灯片计数不起作用
- javascript - Vis-Network.js 禁止显示边框
- php - 如何从 youtube 频道 html 获取实时视频 ID
- python-3.x - 旧会话 ID 不可用
- php - mysql触发器或事件在一段时间(60秒)后执行更新
- java - 为什么 ArrayList 总是返回最后一个对象?