Har*_*Das 3 javascript regex string replace
我的数据是
\nHello ***** World\nRun Code Online (Sandbox Code Playgroud)\n我需要
\nHello **** World\nRun Code Online (Sandbox Code Playgroud)\n所以基本上 5 次出现的星号被替换为 4 次出现的星号。我怎样才能做到这一点在正则表达式javascript中。
\n注意:星星的数量是动态的。
\n我尝试过此操作,但不确定如何替换捕获组:
\nHello ***** World\nRun Code Online (Sandbox Code Playgroud)\r\n更新:
\nWiktor 的解决方案非常有效。但不确定如何将其转化为我在正则表达式中面临的实际问题。所以我想,发布我的实际问题是值得的。
\n我的数据是这样的:
\n1. Hello\n\n\n\xe2\x80\xa2 World\nRun Code Online (Sandbox Code Playgroud)\n我需要这个
\n1. Hello\n\n\xe2\x80\xa2 World\nRun Code Online (Sandbox Code Playgroud)\n我需要将之间的额外行数减少到 n-1
\n[Numeric].[Space][Any text]\n\nand\n\n\xe2\x80\xa2[Three Spaces][AnyText]\nRun Code Online (Sandbox Code Playgroud)\n反之亦然
\n\xe2\x80\xa2[Three Spaces][AnyText]\n\nand \n\n[Numeric].[Space][Any text]\nRun Code Online (Sandbox Code Playgroud)\n注意:抱歉解释不好。我是正则表达式新手。
\n您可以捕获一个或多个星号,然后进行匹配而不捕获另一个(序列中的最后一个)星号,并替换为对组值的反向引用:
\nconsole.log("Hello ***** World".replace(/(\\*+)\\*/g, "$1"));Run Code Online (Sandbox Code Playgroud)\r\n请参阅正则表达式演示。
\n这里还有其他类似的解决方案:
\nconsole.log("Hello ***** World".replace(/(\\*)\\*(?!\\*)/g, \'$1\'));\nconsole.log("Hello ***** World".replace(/(?<=\\*)\\*(?!\\*)/g, \'\'));Run Code Online (Sandbox Code Playgroud)\r\n请参阅正则表达式演示 #2和正则表达式演示 #3。
\n在 中(\\*)\\*(?!\\*),第一个*被捕获到组 1 中,然后匹配其右侧没有其他星号的星号,并且$1替换项将执行第一个解决方案中的工作。
正则表达式(?<=\\*)\\*(?!\\*)仅匹配左侧紧邻星号且右侧紧邻没有星号的任何星号(这就是替换模式为空的原因)。
将其应用于减少两个字符串之间的换行数量问题可能看起来像
\ntext = text.replace(/(\\d+\\.\\s.*(?:\\r\\n?|\\n)+)(?:\\r\\n?|\\n)(?=\xe2\x80\xa2\\s{3})/g, \'$1\').replace(/(\xe2\x80\xa2\\s{3}.*(?:\\r\\n?|\\n)+)(?:\\r\\n?|\\n)(?=\\d+\\.\\s)/g, \'$1\')\nRun Code Online (Sandbox Code Playgroud)\n请参阅此演示和另一个“反之亦然”演示。
\n此处,(?:\\r\\n?|\\n)替换了\\*模式并匹配 CRLF、LF 或 CR 行结尾。\\s{3}匹配任意三个空白字符。\\d+\\.\\s匹配一个或多个数字.和一个空格,并.*匹配除换行符之外的任何零个或多个字符,尽可能多(行模式的其余部分)。前瞻 ,(?=...)用于确保连续匹配项被匹配。
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |