Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript regex在减价期间的复杂场景_Javascript_Regex - Fatal编程技术网

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以获取您的善意贡献。感激