例如:给定一个字符串......“1,2,3,4”
我需要能够在之前/之前删除给定的数字和逗号,具体取决于匹配是否在字符串的末尾。
删除(2)=“1,3,4”
删除(4)=“1,2,3”
另外,我正在使用javascript。
答案 0 :(得分:3)
正如jtdubs所示,一种简单的方法是使用split函数来获取没有逗号的元素数组,从数组中删除所需的元素,然后使用join函数重建字符串。
对于javascript,这样的事情可能会起作用:
function remove(array,to_remove)
{
var elements=array.split(",");
var remove_index=elements.indexOf(to_remove);
elements.splice(remove_index,1);
var result=elements.join(",");
return result;
}
var string="1,2,3,4,5";
var newstring = remove(string,"4"); // newstring will contain "1,2,3,5"
document.write(newstring+"<br>");
newstring = remove(string,"5");
document.write(newstring+"<br>"); // will contain "1,2,3,4"
如果你有重复,你还需要考虑你想要的行为,比如字符串是“1,2,2,4”,我说“删除(2)”它应该删除两个实例还是只删除第一个?此函数将仅删除第一个实例。
答案 1 :(得分:2)
只需使用多次替换。
s/^$removed,//;
s/,$removed$//;
s/,$removed,/,/;
这比尝试发明处理所有这些案例的单个替换更容易。
答案 2 :(得分:1)
string input = "1,2,3,4";
List<string> parts = new List<string>(input.Split(new char[] { ',' }));
parts.RemoveAt(2);
string output = String.Join(",", parts);
答案 3 :(得分:0)
而不是使用正则表达式,我会做类似的事情:
- split on comma
- delete the right element
- join with comma
这是一个完成工作的perl脚本:
#!/usr/bin/perl
use 5.10.1;
use strict;
use warnings;
my $toremove = 5;
my $string = "1,2,3,4,5";
my @tmp = split/,/, $string;
@tmp = grep{ $_ != $toremove }@tmp;
$string =join',', @tmp;
say $string;
输出:
1,2,3,4
答案 4 :(得分:0)
自发布此问题以来,JavaScript已有所改进。 我使用以下正则表达式从csv字符串中删除项目
let searchStr = "359";
let regex = new RegExp("^" + searchStr + ",?|," + searchStr);
csvStr = csvStr.replace(regex, "");
如果child_id是开始,中间或结束,或者仅是item,则替换它。 如果searchStr在csvStr的开头,则它将替换所有结尾的逗号。否则,如果searchStr在csvStr中的其他位置,则必须在其前面加上逗号,以便将searchStr及其前面的逗号替换为空字符串。