Chuỗi con có chỉ số ngược


67
8
Phạm Tuyết Anh
10 năm trước

Làm cách nào tôi có thể trích xuất "456" từ "xxx_456" trong đó xxx có độ dài không xác định?

Hữu ích 67 Yêu thích 8 Chia sẻ Viết bình luận 1
Không hữu ích

Câu hỏi này sẽ hữu ích hơn rất nhiều nếu được đặt theo một cách chung chung: "Làm thế nào tôi có thể trích xuất phần cuối của chuỗi sau lần xuất hiện cuối cùng của một dấu phân cách cho trước?".

Hữu ích 1 · Không hữu ích · Trả lời 0

11 Trả lời


68
Lê Như Thảo
10 năm trước
var str = "xxx_456";
var str_sub = str.substr (str.lastIndexOf ("_") + 1);

Nếu nó không phải luôn luôn là ba chữ số ở cuối (và được phân tách bằng dấu gạch dưới). Nếu dấu phân cách kết thúc không phải luôn luôn là dấu gạch dưới, thì bạn có thể sử dụng regex:

var pat = / ([0-9] {1,}) $ /;
var m = str.match (vỗ);
Hữu ích 68 Trả lời hay nhất Chia sẻ Viết bình luận 2
Không hữu ích

@Phil: không thể đo nhanh hơn, trừ khi nó được gọi hàng ngàn lần. Bạn cần gọi cho họ hàng triệu lần trước khi sự khác biệt đáng chú ý.

Hữu ích 7 · Không hữu ích · Trả lời 0

+1 last IndexOf chính xác là những gì bạn muốn ở đây, nhanh hơn regex và linh hoạt hơn nền.

Hữu ích 1 · Không hữu ích · Trả lời 0

164
Nguyễn Hòa Thái
10 năm trước

slice chỉ hoạt động tốt trong IE và các trình duyệt khác, đây là một phần của đặc tả và cũng là phương pháp hiệu quả nhất:

alert("xxx_456".slice(-3));
//-> 456

Phương thức lát (Chuỗi) - Lát MSDN
- Trung tâm nhà phát triển Mozilla

Hữu ích 164 Chia sẻ Viết bình luận 5
Không hữu ích

đây sẽ là câu trả lời được chấp nhận

Hữu ích 22 · Không hữu ích · Trả lời 0

giải pháp sạch nhất.

Hữu ích 5 · Không hữu ích · Trả lời 0

Câu trả lời hoàn hảo.

Hữu ích 4 · Không hữu ích · Trả lời 0

@ user1429980 Nếu với "đảo ngược", bạn có nghĩa là xóa ba chữ số cuối cùng"xxx_456".slice(0, -3)

Hữu ích 1 · Không hữu ích · Trả lời 0

Lưu ý rằng đảo ngược sẽ không hoạt động:"xxx_456".slice(3)

Hữu ích 0 · Không hữu ích · Trả lời 0

23
Hoàng Huyền Diệu
10 năm trước

Các chuỗi phương pháp cho phép bạn chỉ định bắt đầu và chỉ số cuối:

var str = "xxx_456";
var subStr = str.substring(str.length - 3, str.length);
Hữu ích 23 Chia sẻ Viết bình luận 0
Không hữu ích

5
Bùi Quỳnh Thơ
10 năm trước

bạn chỉ có thể tách nó ra và lấy phần tử cuối cùng

var string="xxx_456";
var a=string.split("_");
alert(a[1]); #or a.pop
Hữu ích 5 Chia sẻ Viết bình luận 1
Không hữu ích

+1, tôi sẽ cung cấp phương pháp split-pop trong câu trả lời của riêng tôi nếu bạn chưa đề cập đến nó :-)

Hữu ích 1 · Không hữu ích · Trả lời 0

2
Vũ Huy Khánh
10 năm trước
alert("xxxxxxxxxxx_456".substr(-3))

báo trước: theo mdc , không tương thích với IE

Hữu ích 2 Chia sẻ Viết bình luận 1
Không hữu ích

nhưng slicelà - xem câu trả lời của tôi.

Hữu ích 3 · Không hữu ích · Trả lời 0

2
Trần Quang Khải
10 năm trước

Một cách tiếp cận regex điên rồ

"xxx_456".match(/...$/)[0] //456
Hữu ích 2 Chia sẻ Viết bình luận 3
Không hữu ích

@Kooilnc: Không cần phải quá phức tạp regexes chỉ vì bạn có thể. Ví dụ đầu tiên của bạn cũng sẽ phù hợp với _.

Hữu ích 1 · Không hữu ích · Trả lời 0

cũng có thể là 'xxx_456'.match (/_.+$/) [0] hoặc' xxx_456'.replace (/ (^ ^. +_)(.+$)/,'$ 1 ')?

Hữu ích 0 · Không hữu ích · Trả lời 0

@Andy E: bạn nói đúng về _. Khả năng thứ hai: $ 1 nên là $ 2 bằng cách này.

Hữu ích 0 · Không hữu ích · Trả lời 0

2
Hồ Diễm Quyên
10 năm trước

đây là chức năng tùy chỉnh của tôi

function reverse_substring(str,from,to){
  var temp="";
  var i=0;
  var pos = 0;
  var append;      
  for(i=str.length-1;i>=0;i--){
    //alert("inside loop " + str[i]);
    if(pos == from){
         append=true;
    }

    if(pos == to){
         append=false;
         break;
    }
    if(append){
         temp = str[i] + temp;
    }
    pos++;
  }
  alert("bottom loop " + temp);
}

var str = "bala_123";
reverse_substring(str,0,3);

Hàm này hoạt động cho chỉ mục ngược.

Hữu ích 2 Chia sẻ Viết bình luận 3
Không hữu ích

Không quá phức tạp?

Hữu ích 2 · Không hữu ích · Trả lời 0

quá phức tạp, chỉ cần sử dụng"xxxxxxx_456".slice(-3)

Hữu ích 1 · Không hữu ích · Trả lời 0

nó có phức tạp không tôi chỉ thực hiện chuỗi con theo kiểu ngược. đó là nó. và đây là cho những gì người dùng yêu cầu từ tiêu đề của mình.

Hữu ích 0 · Không hữu ích · Trả lời 0

2
Dương Ðịnh Siêu
10 năm trước

Regex đơn giản cho bất kỳ số chữ số nào ở cuối chuỗi:

'xxx_456'.match(/\d+$/)[0]; //456
'xxx_4567890'.match(/\d+$/)[0]; //4567890

hoặc sử dụng split / pop thực sự:

('yyy_xxx_45678901').split(/_/).pop(); //45678901
Hữu ích 2 Chia sẻ Viết bình luận 0
Không hữu ích

2
Võ Bảo Duy
5 năm trước
String.prototype.reverse( ) {
     return Array.prototype.slice.call(this)
          .reverse()
          .join()
          .replace(/,/g,'')
}

sử dụng phương pháp chuỗi ngược

var str = "xxx_456"
str = str.reverse() // 654_xxx 
str = str.substring(0,3) // 654 
str = str.reverse() //456

nếu phương thức ngược của bạn trả về chuỗi thì xâu chuỗi các phương thức cho một giải pháp sạch hơn.

Hữu ích 2 Chia sẻ Viết bình luận 3
Không hữu ích

trong api nào phương thức Reverse () xuất hiện?

Hữu ích 0 · Không hữu ích · Trả lời 0

@MikeS. Tôi chỉnh sửa câu trả lời của tôi, cảm ơn.

Hữu ích 0 · Không hữu ích · Trả lời 0

@MikeS. vui lòng +1 nếu điều này có ích

Hữu ích 0 · Không hữu ích · Trả lời 0

2
Lê Tường Vy
2 năm trước

Ngoài ra, bạn có thể nhận được kết quả bằng cách sử dụng substringlastIndexOf-

alert("xxx_456".substring("xxx_456".lastIndexOf("_")+1));
Hữu ích 2 Chia sẻ Viết bình luận 0
Không hữu ích

0
Ngô Thường Kiệt
1 năm trước

Mặc dù đây là một câu hỏi cũ, để hỗ trợ câu trả lời của người dùng187291

Trong trường hợp độ dài cố định của chuỗi con mong muốn, tôi sẽ sử dụng substr()với đối số phủ định cho cú pháp ngắn và dễ đọc của nó

"xxx_456".substr(-3)

Cho đến nay, nó tương thích với các trình duyệt phổ biến và chưa được phản đối nghiêm ngặt.

Hữu ích 0 Chia sẻ Viết bình luận 0
Không hữu ích

Trả lời của bạn

Xem trước nội dung