正则表达式:匹配两点间含换行的所有内容(排除特定场景)
正则匹配方案调整
目标代码片段
先看三段待匹配的代码:
changed: true newTranslated: '' importedTokens: true
changed: true newTranslated: Some cool text here Here is some more next importedTokens: true
changed: true newTranslated: '|cFFASD2Hello there!' importedTokens: true
需求说明
要匹配从changed: true到importedTokens之间的所有内容(包含changed: true,但不包含importedTokens),同时要排除newTranslated: ''这种情况。之前用的changed: true\n.*^((?!'').)*$只能匹配newTranslated的第一行,没法覆盖后续行,需要调整正则逻辑。
可行的正则表达式
方案一(支持多行模式时)
如果你的正则工具支持多行模式(m flag),可以使用这个表达式:
changed: true\n(?:(?!importedTokens:|newTranslated: '').)*
方案二(通用版,无需特定模式)
若环境不支持多行模式,用这个更稳妥——它通过[\s\S]匹配所有字符(包括换行):
changed: true(?:(?!newTranslated: ''|importedTokens:)[\s\S])*
正则逻辑解释
changed: true:先精准匹配起始的目标行(?:...):非捕获组,用来包裹匹配规则,避免生成额外的捕获结果(?!newTranslated: ''|importedTokens:):负向前瞻,实现两个核心逻辑:- 一旦碰到
importedTokens:就停止匹配,确保结果不包含该行 - 直接排除包含
newTranslated: ''的目标片段
- 一旦碰到
[\s\S]*/.*:匹配任意字符,前者兼容所有换行场景,后者在多行模式下也能匹配换行内容
调整后的正则可以精准匹配到changed: true到importedTokens前的全部内容,同时自动过滤掉newTranslated: ''的情况。
内容的提问来源于stack exchange,提问作者Yoruichi Shihoin
相关产品推荐
相关产品推荐

