2010-09-30 65 views
20

我在寻找如何来替换最后一个问题替换字符的最后一次出现在字符串“‘与’和”的字符串:如何使用javascript

有了这个字符串: 为test1, TEST2,TEST3

,我想结束了: TEST1,TEST2和TEST3

我想是这样的:

var dialog = 'test1, test2, test3';  
dialog = dialog.replace(new RegExp(', /g').lastIndex, ' and '); 

,但它不工作

回答

36
foo.replace(/,([^,]*)$/, ' and $1') 

使用$(线结束)锚给你你的位置,并寻找到逗号指标不包括任何进一步的逗号权的模式。

编辑:

上述工作正是为了定义(尽管替换字符串是任意宽松),但根据从评论下面更好批评的要求反映了原始需求的精神。

foo.replace(/,\s([^,]+)$/, ' and $1') 
+0

+1,可能比使用'\ w'更好,因为它更具包容性,例如:http://jsbin.com/utedu/2 – 2010-09-30 10:04:02

+0

这也匹配'test1,test2,'并产生'test1,test2和'为了它。此外,它为原始输入字符串插入冗余空格字符,因为它忘记匹配','后的空格字符。 – splash 2010-09-30 10:50:07

+1

@splash - 请参阅编辑。我非常有信心,如果要求比表达的更详细,OP本人可以自己做出修改,我不想推定人们真正意图说什么。 – annakata 2010-09-30 10:59:50

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

$1指的是本场比赛的第一个捕获组(\w+)

+1

例如:http://jsbin.com/utedu – 2010-09-30 10:02:27

+0

这个wi如'test-1,test-2,test-3'这样的字符串会失败,但我相信OP可以自己做出这样的改编。 – annakata 2010-09-30 11:02:03

+0

这是对的@annakata。 – splash 2010-09-30 11:22:26

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
哪些只是缺少一个空白