Tôi khá chắc chắn sau khi trải qua đêm cố gắng tìm câu trả lời rằng điều này là không thể, và tôi đã phát triển một công việc xung quanh - nhưng, nếu ai đó biết về một phương pháp tốt hơn, tôi rất muốn nghe nó ...JavaScript tham chiếu trở lại tham chiếu trả về một mảng các kết quả phù hợp từ nhóm đơn lẻ (nhiều nhóm)
Tôi đã trải qua rất nhiều lần lặp lại mã, và sau đây chỉ là một dòng suy nghĩ thực sự. Tại một số điểm, tôi đã sử dụng lá cờ toàn cầu, tôi tin rằng, để cho trận đấu() có thể hoạt động, và tôi không thể nhớ nó có cần thiết hay không.
var str = "@[email protected]@ghi&jkl";
var regex = /^(?:@([a-z]+))?(?:&([a-z]+))?$/;
Ý tưởng ở đây, trong mã đơn giản này, là nhóm tùy chọn 1, trong đó có số tiền không xác định, sẽ khớp với @abc, @def và @ghi. Nó sẽ chỉ chụp các ký tự alpha trong đó sẽ có một hoặc nhiều ký tự. Nhóm 2 là giống nhau, ngoại trừ các trận đấu trên biểu tượng &. Nó cũng nên được neo vào đầu và cuối của chuỗi.
Tôi muốn để có thể sao lưu tài liệu tham khảo tất cả các trận đấu của cả hai nhóm, ví dụ:
result = str.match(regex);
alert(result[1]); //abc,def,ghi
alert(result[1][0]); //abc
alert(result[1][1]); //def
alert(result[1][2]); //ghi
alert(result[2]); //jkl
người bạn đời của tôi nói rằng làm việc này tốt cho anh trong .net, tiếc là tôi chỉ đơn giản là không thể có được nó để làm việc - chỉ xuất hiện của bất kỳ nhóm cuối cùng được trả về trong tài liệu tham khảo trở lại, như có thể thấy trong những điều sau đây:
(bổ sung, làm cho một trong hai nhóm tùy chọn làm cho một mớ hỗn độn, cũng như thiết lập cờ toàn cầu)
var str = "@[email protected]@ghi&jkl";
var regex = /(?:@([a-z]+))(?:&([a-z]+))/;
var result = str.match(regex);
alert(result[1]); //ghi
alert(result[1][0]); //g
alert(result[2]); //jkl
Sau đây là giải pháp tôi đến, nắm bắt được toàn bộ phần trong câu hỏi, và tạo ra mảng bản thân mình:
var str = "@[email protected]@ghi&jkl";
var regex = /^([@a-z]+)?(?:&([a-z]+))?$/;
var result = regex.exec(str);
alert(result[1]); //@[email protected]@ghi
alert(result[2]); //jkl
var result1 = result[1].toString();
result[1] = result1.split('@')
alert(result[1][1]); //abc
alert(result[1][2]); //def
alert(result[1][3]); //ghi
alert(result[2]); //jkl
Cảm ơn bạn đã trả lời. Tôi nghĩ rằng có thể có một giải pháp thanh lịch hơn. http://stackoverflow.com/a/1412662/1455709 là câu trả lời gần nhất mà tôi có thể tìm thấy, tuy nhiên không thành công khi làm phức tạp biểu hiện và giầy nó thành những gì tôi đã theo sau ... – Patrick
Bạn được chào đón. May mắn nhất! – Pointy