当目标是上下文的开始时,此匹配将失败。
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.dir(txt.match(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm));但是,如果在开始时添加一个换行符,那么匹配就可以了。
let txt = `
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;有人知道regex的哪一部分是错的吗?还是这是(?<=)限制?
无论如何,使它只需要一个正则表达式就可以匹配,并且仍然使用(?<=)。
我的env是支持lookBehind的,我的另一些规则是需要检查prev,所以我希望lookBehind和lookAhead能够处理这个问题。
一个regex是指,不要使用2或更多regexp来处理这个问题。
外派
[/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」](?:\n|$))/, '\n'],
[/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'],代码
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.dir(txt.replace(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm, '\n'));预期结果是
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」
实际输出为(在node.js 12中)
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n\n「哈,哈……」\n「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」\n「哈,哈……」
发布于 2019-08-09 23:47:27
您不需要断言,因为它们是单独使用的。
您不能在全局上下文中使用它们,因为您同时使用了
锚定在他们的^$。
因此,它们是无用的。
要区分换行符,只需添加捕获组即可。
此外,不要在字符类中使用Unicode字符,您可以使用
有一天搞错了。
就像我那样做..。
/^[\u300c\u300e][^\r\n]+[\u300f\u300d](\s*\r?\n\s*\r?\n\s*)[\u300c\u300e][^\r\n]+[\u300f\u300d]$/
扩容
^
[\u300c\u300e]
[^\r\n]+
[\u300f\u300d]
( # (1 start)
\s*
\r? \n \s*
\r? \n \s*
) # (1 end)
[\u300c\u300e]
[^\r\n]+
[\u300f\u300d]
$ 发布于 2019-08-09 23:20:07
也许,如果用其他表达式删除空行是可以的,例如:
([「『][^\r\n]*[』」])\s*([「『][^\r\n]*[』」])测试
const regex = /([「『][^\r\n]*[』」])\s*([「『][^\r\n]*[』」])/gm;
const str = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.log(str.replace(regex, `$1\n$2`));
该表达式将在regex101.com的右上面板上解释,如果您希望探索/简化/修改它,那么在此链接中,您可以观察它如何与某些示例输入相匹配(如果您愿意)。
https://stackoverflow.com/questions/57437993
复制相似问题