我想在第一次和最后一次出现时用|
替换""
。
示例:
"Hello | my name | is | Jason | and I like hacking"
到目前为止,我只能做其中一个。
第一次出现:
^(.*?)[|]
最后一次出现:
(|)[^|]*$"
是否可以一次更换两者,还是必须分步更换?
答案 0 :(得分:3)
试试这个
^([^|]*)\||\|(?=[^|]*$)
并将其替换为
$1"
这里的技巧是将字符串中的第一部分与捕获组匹配,并将其写入替换字符串中。对于匹配最后一个“|”的第二个替代方案没有捕获组,所以这将填充空字符串,并且在替换字符串中不会受到伤害。
答案 1 :(得分:1)
我认为这可以解决问题:(?:^[^|]*(\|))|(?:(\|)[^|]*$)
你会得到第一个和最后一个|在比赛组中
如果您使用支持可变长度lookbehind的RegEx引擎,我认为这样可行:(?<=^[^|]*)\||\|(?=[^|]*$)
您只会匹配第一个和最后一个|
答案 2 :(得分:1)
将字符串视为由这些部分组成:第一个管道之前的部分,管道,中间部分,管道以及最后一个管道之后的部分。
捕获您想要的部分:([^|]*)[|](.*)[|](.*)
然后从捕获的部分构建结果:$1$2$3
答案 3 :(得分:0)
其他答案中的一些应该起作用,但是我相信它们可能在设计上有些过分。下面的简单正则表达式应该可以使用。
\|(.*)\|
此正则表达式之所以有效,是因为.*
不是贪婪的,它会根据需要返回以匹配模式。在这种情况下,这意味着捕获组将捕获第一个和最后一个管道之间的所有内容。然后,您可以使用所需的任何字符替换管道。下面的Javascript示例。
var str = "Hello | my name | is | Jason | and I like hacking";
var regex = /\|(.*)\|/;
str = str.replace(regex, "\"$1\"");