2015-07-07 18 views
5

Tôi muốn đạt được một cách để có được tất cả nội dung giữa một thẻ mở và thẻ đóng của nó. Vấn đề là đôi khi tôi có thể có khoảng lồng nhau và tôi muốn chắc chắn rằng regex của tôi không dừng lại một khoảng kết thúc đầu tiên nó nhìn thấy.Sử dụng XRegExp.matchRecursive cho các nhịp lồng nhau

Để xem vấn đề cái nhìn của tôi lúc này: Regex101 : nested span

Tôi muốn chắc chắn rằng tôi nhận được tất cả mọi thứ giữa mở và thẻ đóng. không có vấn đề bao nhiêu </span> Tôi có thể tìm thấy bên trong.

Tôi đã tìm thấy một thư viện được thực hiện bởi Steven Levithan mà có thể đạt được mong muốn của tôi. Vấn đề tôi có là ví dụ là cơ bản và tôi không chắc mình có thể đạt được những gì tôi muốn.

Tôi đang sử dụng phương pháp XregExp.matchRecursive. Trong ví dụ, họ đưa ra một thẻ bắt đầu và một thẻ kết thúc. Thẻ bắt đầu của tôi hơi phức tạp, trông giống như sau: <span style=\\?"color:([a-zA-Z\s]*?)\\?">. Vấn đề là khi tôi thực hiện phương pháp này với dấu phân cách này, tôi nhận được lỗi này: chuỗi chứa ký tự không cân bằng. Chuỗi thử nghiệm là:

<p style=\"text-align:justify\"> 
    <span style=\"font-size:12pt\"> 
     <span style=\"color:Green\"> 
      <span style=\"font-family:Verdana\">There is some content for a mm advertisment.There is some co</span> 
      <span style=\"font-family:Times New Roman\">ntent for a mm advertisment.</span> 
     </span> 
    </span> 
</p> 

Tôi nghĩ rằng vấn đề của tôi là do regex tôi sử dụng làm dấu phân cách bắt đầu. Theo giải thích trong các doc chúng ta nên thêm một mức độ thoát ngược dấu gạch chéo ngược trong regex. Đó là lý do tại sao tôi thử regex này như dấu phân cách bắt đầu: <span style=\\\\?"color:([a-zA-Z\\s]*?)\\\\?">. Vẫn không làm việc. Tôi không thấy làm thế nào tôi có thể làm để nói với phương pháp này để tìm thấy tất cả mọi thứ giữa span có thuộc tính phong cách màu sắc và thẻ đóng của mình.

Có thể ai đó có giải pháp?

+0

Tại sao bạn lại sử dụng cụm từ thông dụng cho điều này? Nếu đó là HTML hợp lệ, vui lòng sử dụng các hàm DOM. –

+0

Tất nhiên với jquery tôi có thể làm điều đó trong một dòng mã với phương thức html(). Nhưng tôi cần phải làm điều này phía máy chủ trong một môi trường Wakanda. – Ganbin

+0

Tôi không nói về jquery, JavaScript thuần túy cũng có thể làm điều này; chắc chắn nó cũng có sẵn trong môi trường máy chủ. –

Trả lời

1

Vì vậy, khối bạn đang truy cập là lỗi "chuỗi chứa dấu phân cách không cân bằng".

Điều đó có thể là do dấu phân cách bắt đầu của bạn chỉ khớp với một trong các thẻ mở đầu trong đầu vào thử nghiệm của bạn (thẻ xác định màu), nhưng dấu phân cách cuối của bạn khớp với tất cả bốn thẻ kết thúc.

Tôi nghĩ bạn sẽ phải tiếp cận điều này bằng cách kết hợp trước hết tất cả thẻ span (với thư viện bạn đã tìm thấy) và sau đó xử lý lại để tìm những thứ bạn quan tâm.

1

Có lẽ một tùy chọn để sử dụng một số loại trình phân tích cú pháp mạnh hơn các cụm từ thông dụng không? Sau này, nói chung, không thực sự thích hợp để phân tích cú pháp các ngôn ngữ không thường xuyên, mặc dù chúng có thể cung cấp các phần mở rộng nhất định so với các biểu thức chính quy "thuần túy" trong ý nghĩa lý thuyết.

+0

OP đang sử dụng XRegExp, mà (như tôi hiểu nó) _ ** là ** _ mạnh hơn chỉ sử dụng các biểu thức chính quy. Điều đó sang một bên, ý kiến ​​thêm từ OP đã loại trừ bằng cách sử dụng một công cụ thậm chí còn thích hợp hơn cho trường hợp sử dụng của mình. (Than ôi.) – randomsimon

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