我正在寻找一种方法来删除字符串中第一次出现的逗号,例如
"some text1, some tex2, some text3"
应该返回:
"some text1 some text2, some tex3"
因此,该函数应仅查看是否有多个逗号,如果有,则应删除第一个匹配项。这可能是用正则表达式解决的,但我不知道如何写它,任何想法?
答案 0 :(得分:20)
这样做:
if (str.match(/,.*,/)) { // Check if there are 2 commas
str = str.replace(',', ''); // Remove the first one
}
当您使用replace
方法使用字符串而不是RE时,它只是替换第一个匹配。
答案 1 :(得分:10)
String.prototype.replace
仅替换匹配的第一次出现:
"some text1, some tex2, some text3".replace(',', '')
// => "some text1 some tex2, some text3"
仅当您使用g
标志指定正则表达式时才会进行全局替换。
var str = ",.,.";
if (str.match(/,/g).length > 1) // if there's more than one comma
str = str.replace(',', '');
答案 2 :(得分:2)
简单的一个班轮就可以了:
text = text.replace(/^(?=(?:[^,]*,){2})([^,]*),/, '$1');
以下是它的工作原理:
regex = re.compile(r"""
^ # Anchor to start of line|string.
(?= # Look ahead to make sure
(?:[^,]*,){2} # There are at least 2 commas.
) # End lookahead assertion.
([^,]*) # $1: Zero or more non-commas.
, # First comma is to be stripped.
""", re.VERBOSE)
答案 3 :(得分:1)
分裂的方式:
var txt = 'some text1, some text2, some text3';
var arr = txt.split(',', 3);
if (arr.length == 3)
txt = arr[0] + arr[1] + ',' + arr[2];
或更短:
if ((arr = txt.split(',', 3)).length == 3)
txt = arr[0] + arr[1] + ',' + arr[2];
如果数组中少于3个元素(少于2个逗号),则字符串保持不变。 split方法使用limit参数(设置为3),一旦达到3个元素的限制,split方法就会停止。
或替换:
txt = txt.replace(/,(?=[^,]*,)/, '');
答案 4 :(得分:1)
你也可以像^(.*?),(?=.*,)
那样使用前瞻,并替换w $1
Demo