2010-06-12 26 views
5

Giả sử bạn có chuỗi: "Bò ABC nhảy qua XYZ mặt trăng" và bạn muốn sử dụng jQuery để lấy chuỗi con giữa "ABC" và "XYZ", bạn sẽ làm như thế nào ? Chuỗi con nên là "bò nhảy qua". Cảm ơn nhiều!Sử dụng jQuery để tìm chuỗi con

+0

Trước hết, bạn không sử dụng jQuery để làm chuỗi thao tác - đó là Javascript/ECMAScript. Thứ hai, bạn có thể cụ thể hơn về logic được sử dụng để lấy chuỗi đó không? Có mẫu không? –

+0

Câu hỏi cho jQuery không được gắn thẻ với jQuery –

+0

Vâng anyways tại sao cần jQuery? javascript không thể làm việc đơn giản cho bạn –

Trả lời

6

Điều này không liên quan gì đến jQuery, vốn chủ yếu cho việc lướt qua và thao tác DOM. Bạn muốn có một biểu thức chính quy đơn giản:

var str = "The ABC cow jumped over XYZ the moon"; 
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); 

Ý tưởng là bạn đang sử dụng một String.replace với một biểu thức chính quy mà phù hợp với khai mạc và bế mạc của bạn delimiters, và thay thế toàn bộ chuỗi với phần phù hợp giữa các dấu phân cách.

Đối số đầu tiên là cụm từ thông dụng. Đường nhỏ m làm cho nó khớp với nhiều dòng, có nghĩa là văn bản của bạn giữa ABCXYZ có thể chứa dòng mới. Phần còn lại bị phá vỡ như sau:

  • ^ bắt đầu vào đầu của chuỗi
  • .* một loạt các 0 hoặc nhiều ký tự
  • ABC delimiter mở của bạn
  • (.*) trận đấu một loạt từ 0 trở lên ký tự
  • XYZ dấu phân cách đóng của bạn
  • .* một chuỗi 0 hoặc nhiều ký tự
  • $ trận đấu đến cuối của chuỗi

Tham số thứ hai, chuỗi thay thế, là '$ 1'. replace sẽ thay thế trong các bản phụ được lồng tiếng từ thông lệ xuất hiện thường xuyên của bạn - phần (.*) từ trên cao. Do đó giá trị trả về là toàn bộ chuỗi thay thế bằng các phần giữa các dấu phân cách.

+0

Tôi nghĩ jQuery có chức năng: chuỗi con và indexof, và rằng chúng có thể được sử dụng cùng nhau để lấy chuỗi con. – Steve

+0

Bạn có thể giải thích ngắn gọn cách thức hoạt động này: str.replace (/^.* ABC (. *) XYZ. * $ /, '$ 1'); – Steve

+0

@Steve - JavaScript của nó có các chức năng như chuỗi con và indexof. jQuery giao dịch chủ yếu với DOM của một trang. –

3

Bạn có thể không cần sử dụng jQuery trên trang này. Tôi sẽ làm một việc như sau:

function between(str, left, right) { 
    if(!str || !left || !right) return null; 
    var left_loc = str.indexOf(left); 
    var right_loc = str.indexOf(right); 
    if(left_loc == -1 || right_loc == -1) return null; 
    return str.substring(left_loc + left.length, right_loc); 
} 

Không đảm bảo mã trên không có lỗi, nhưng ý tưởng là sử dụng chức năng chuẩn substring(). Theo kinh nghiệm của tôi, các loại chức năng này hoạt động giống nhau trên tất cả các trình duyệt.

+0

Cảm ơn sự giúp đỡ !! – Steve

+0

tôi thích cái này vì tôi ghét regex, tự hỏi nếu đó là lý do tốt :) – henrijs

0

Chỉ để cho bạn thấy cách bạn sử dụng jQuery và regex của meagar. Hãy nói rằng bạn đã có một trang HTML với P thẻ sau:

<p id="grabthis">The ABC cow jumped over XYZ the moon</p> 

Để lấy chuỗi, bạn sẽ sử dụng sự pha trộn jQuery/JavaScript sau (âm thanh loại ngu ngốc, kể từ jQuery là JavaScript, nhưng thấy jQuery là một thư viện JavaScript DOM):

$(document).ready(function() { // Wait until the document has been fully loaded 
    var pStr=$("#grabthis").text(); // Grab the text from the P tag and put it into a JS variable 
    var subStr=pStr.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); // Run the regex to grab the middle string 

    alert(subStr); // Output the grabbed middle string 
}); 

Hoặc phiên bản ngắn hơn:

$(document).ready(function() { 
    alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1')); 
}); 

các thay thế chức năng là một hàm JavaScript. Tôi hy vọng điều này sẽ xóa bỏ sự nhầm lẫn.

1

Meagar, lời giải thích của bạn rất tuyệt, và giải thích rõ ràng ai hoạt động.

Chỉ cần một vài câu hỏi nhỏ:

  • Có phải() ngoặc cần chỉ như là một cách để chỉ ra một submatch trong tham số thứ hai của hàm relpace hoặc sẽ này cũng xác định submatches:/^. * ABC. XYZ. $/nhưng không hoạt động cho những gì chúng tôi đang cố gắng thực hiện trong trường hợp này?

  • Có biểu thức chính quy này có 7 submatches:...

^
*
ABC
*
XYZ
*
$

  • Liệu $ 1 có nghĩa là sử dụng fi rst cha mẹ submatch? Lúc đầu, tôi nghĩ rằng nó có thể có nghĩa là sử dụng submatch thứ hai trong loạt bài này (lần đầu tiên là $ 0).

Cảm ơn,

Steve

Các vấn đề liên quan