2015-05-01 15 views
5

Tôi đã tạo chuỗi và về bản chất là một danh sách các thứ. Chuỗi này là cái gì đó sẽ được đọc bởi người sử dụng, vì vậy tôi đang cố gắng để hình thành nó độc đáo. Tôi tách danh sách được tạo ra sử dụng dấu phẩy và không gian:Thay thế dấu phẩy cuối cùng trong chuỗi bằng "và"

(a+'').replace(/,/g, ", "); 

sản xuất

1, 2, 3, 4 

Tuy nhiên, tôi muốn thay đổi dấu phẩy cuối cùng "và", vì vậy mà nó đọc

1, 2, 3, and 4 

tôi đã thử những điều sau đây:

((a+'').replace(/,/g, ", ")).replace(/,$/, ", and"); 

nhưng nó không hoạt động, mà tôi nghĩ là bởi vì đó là chỉ tìm kiếm dấu phẩy ở cuối của chuỗi, chứ không phải là dấu phẩy cuối cùng trong chuỗi, phải không?

Đồng thời, nếu chỉ có 2 mục trong chuỗi, tôi muốn dấu phẩy được thay thế bằng chỉ "và", thay vì "và", để có ý nghĩa ngữ pháp hơn.

Làm cách nào để đạt được những gì tôi đang tìm kiếm?

Trả lời

5

Bạn có thể muốn

,(?=[^,]+$) 

ví dụ:

"1, 2, 3, 4".replace(/,(?=[^,]+$)/, ', and'); 

(?=[^,]+$) kiểm tra rằng không có nhiều dấu phẩy sau dấu phẩy này. (?!.*,) cũng sẽ hoạt động.

Bạn thậm chí có thể kiểm tra không có đã là một and:

,(?!\s+and\b)(?=[^,]+$) 

dụ làm việc: https://regex101.com/r/aE2fY7/2

+0

Performance câu hỏi: đó regex sẽ thực hiện tốt hơn giữa các bạn một và @Toto một? – ColOfAbRiX

+0

Vô cùng triệt để, cảm ơn rất nhiều! – GtwoK

+0

@ColOfAbRiX - Tôi đoán là vks nhanh hơn, thậm chí chúng ta có thể bỏ nhóm chụp (thay bằng '$ &'). Trong kinh nghiệm của tôi regex là tương đối chậm, vì vậy nếu hiệu suất thực sự quan trọng là một thao tác chuỗi ngắn sẽ tốt hơn. – Kobi

0

Làm thế nào về:

((a+'').replace(/,/g, ", ")).replace(/,([^,]*)$/, ", and $1"); 
-1
var index = a.lastIndexOf(','); 
a.replaceAt(index, ', and'); 

nơi:

String.prototype.replaceAt=function(index, character) { 
    return this.substr(0, index) + character + this.substr(index+character.length); 
} 
4
(.*,) 

Bạn có thể sử dụng Regex.Replace đơn giản này bằng cách $1 and hoặc \1 and .See demo.

https://regex101.com/r/uE3cC4/8

var re = /(.*,)/gm; 
var str = '1, 2, 3, 4'; 
var subst = '$1 and'; 

var result = str.replace(re, subst); 
Các vấn đề liên quan