当目标是上下文的开始时,这个匹配将失败
let txt = `「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
console.dir(txt.match(/(?<=^[「『][^\n]+[』」])\n\n(?=[「『][^\n]+[』」]$)/gm));
但是如果在开头添加一个换行符,匹配就可以了
let txt = `
「呀啊,居然能見到比自己還年輕的母親,時空穿梭真是恐怖呀」
「哈,哈……」`;
有人知道正则表达式的哪一部分是错误的吗?或者这是 (?<=)
限制?
无论如何让它可以只用一个正则表达式匹配它并且仍然使用(?<=)
我的环境支持lookBehind
,我的一些其他规则需要检查prev,所以我希望可以通过lookBehind
解决这个问题。和 lookAhead
一个正则表达式是平均的,不要使用 2 个或更多正则表达式来处理这个
男性
[/(?<=^[「『][^\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「哈,哈……」
最佳答案
您不需要断言,因为它们是一次性使用的。
你不能在全局上下文中使用它们,因为你同时使用它们
锚定在它们 ^$
中。
因此,它们是无用的。
要区分换行符,只需添加捕获组即可。
另外,不要在字符类中使用 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]
$
关于javascript - 用于使用环视删除空行的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57437993/