Javascript regex在减价期间的复杂场景
给定降价源文本:Javascript regex在减价期间的复杂场景,javascript,regex,Javascript,Regex,给定降价源文本: - sometext - sometext followingText - sometext - sometext - sometext 我想将列表范围中的双换行符\n\n替换为\nWhiteSpace\n 所以,我做了 ([\s\s]+?)(?:\n\n(?=\n)))([\s\s]+?)(?:\n\n(?=-) 蓝色选择是几乎可以工作的目标,但第一个双换行符未被选择 这是因为([\s\s]+?)(?:\n\n(?=\n))首先匹配,并且不会计算([\s\s]+
- sometext
- sometext
followingText
- sometext
- sometext
- sometext
我想将列表范围中的双换行符\n\n
替换为\nWhiteSpace\n
所以,我做了
([\s\s]+?)(?:\n\n(?=\n)))([\s\s]+?)(?:\n\n(?=-)
蓝色选择是几乎可以工作的目标,但第一个双换行符未被选择
这是因为([\s\s]+?)(?:\n\n(?=\n))
首先匹配,并且不会计算([\s\s]+?)(?:\n\n(?=-)
当然,我可以还原顺序([\s\s]+?)(?:\n\n(?=-)|([\s\s]+?)(?:\n\n(?=\n))
,
那么现在
现在,第一个选择有效,但第二个选择失败。(与第一个版本相比,第二个选择的预期结果)
这方面有什么办法吗
当然,您可以建议将regex分开,并替换两次;我做到了,结果很混乱,所以我想在一个正则表达式中实现这一点。语言是JS。将我的评论作为答案发布 试试下面的方法。对不起,如果这仍然不是你想要的
regex = new RegExp(/(- [\s\S]+?)(?:(\n){2,}(?=\n|-))/g);
inputString = '- sometext\n\n- sometext\nfollowingText\n\n\n\n- sometext\n\n- sometext\n- sometext';
outputString = inputString.replace(regex,'$1\nWhiteSpace\n');
console.log(outputString);
如果我完全误解了你的问题,我很抱歉,但这就是你想要的吗?谢谢,哈利。不。出于某些技术原因,双新行必须在特定的列表结构上下文中。您正在分析标记吗?您可能不应该为此使用正则表达式。您是否考虑过逐行解析并在每行上分别使用正则表达式?这很好。我现在已经更新了。我最后一次尝试,检查一下,如果这也不是你想要的,我就退出:汉克斯,哈利。事实上,我放弃了我正在做的事情。事实上,我试着为我自己的扩展插件打上标记,但太复杂了,所以我将自己从scrach开始。无论如何,请检查+1以获取您的善意贡献。感激