如何使用javascript替换字符串中最后一个字符的出现位置

46
我有个问题,想知道如何替换字符串中最后一个逗号后面的空格为 "and":
给定这个字符串:test1, test2, test3
期望得到以下结果: test1, test2 and test3
我尝试了如下方法:
var dialog = 'test1, test2, test3';    
dialog = dialog.replace(new RegExp(', /g').lastIndex, ' and ');

但它没有起作用。

3个回答

76
foo.replace(/,([^,]*)$/, ' and $1')
使用$(行尾)锚点以确定您的位置,并查找逗号索引右侧不包含任何其他逗号的模式。
编辑:
以上内容恰好符合所定义的要求(尽管替换字符串过于宽松),但根据评论中的批评,下面更能反映原始要求的精神。

console.log( 
   'test1, test2, test3'.replace(/,\s([^,]+)$/, ' and $1') 
)


+1,可能比Splash使用的\w更全面,例如:http://jsbin.com/utedu/2 - T.J. Crowder
这也匹配了 test1, test2, 并为其生成了 test1, test2 and 。同时,它在原始输入字符串中插入了一个多余的空格字符,因为它忘记了匹配 , 后面的空格字符。 - splash
1
@splash - 请查看编辑。如果要求比表达的更详细,我相信原帖作者本可以自己进行修改,我不想对人们真正想要表达的内容做出假设。 - annakata
我收到了“错误:在“foo.replace(/”中意外的'/'”错误。 - MERose
我基于regex101网站上的这个答案制作了一个示例正则表达式 - Michael Freidgeim

5
result = dialog.replace(/,\s(\w+)$/, " and $1");

$1 指的是匹配中第一个捕获组 (\w+)


这将无法处理像'test-1,test-2,test-3'这样的字符串,但我相信提问者可以自己进行适当的调整。 - annakata

0

正则表达式搜索模式 \s([^,]+)$

Line1: If not, sdsdsdsdsa sas ., sad, whaterver4
Line2: If not, fs  sadXD sad ,  ,sadXYZ!X
Line3: If not d,,sds,, sasa sd a, sds, 23233

使用模式搜索可以找到 行1:whaterver4 行3:23233

但是无法找到行2:sadXYZ!X
这只是缺少一个空格


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接