2012-02-21 33 views
5

Tôi có regex này đơn giản để bắt dụ cuối cùng của 'chuyển sang 123' trong một hình thức (Tôi có một regex cho cơ thể chính):javascript regex không phù hợp với char cuối cùng ở dạng

currenttext=currenttext.replace(/([^>])(turn\s+to\s+)(\d+)$/i,"$1<tt ref=\"$3\">$2$3</tt>"); 

mà cho Ví dụ sản phẩm thay thế chuyển sang 123 ... với

<tt ref="123">turn to 123</tt>... 

... ở dạng đầu vào trực tiếp. Tuy nhiên, nó chỉ hoạt động nếu có một số dạng ký tự sau số số 123, cho dù đó là một dấu xuống dòng hoặc một ký tự hiển thị, mà tôi không thể hiểu được vì phần cuối của khớp nối rõ ràng không có ký tự nào khác trước mẫu bộ nhớ cho các chữ số. Nếu không có ký tự tiếp theo, tôi nhận được kết quả này:

<tt ref="12">turn to 12</tt>3 

tức là không bắt được chữ số cuối cùng hoàn toàn. Tôi đã cố gắng đặt các neo $ trong bộ nhớ nhưng không có sự khác biệt.

+0

Trong trình duyệt nào? Nó hoạt động cho tôi, dưới nút, Chromium và Firefox. –

+1

Tôi không thể sao chép hành vi này, nó hoạt động trong regexr: http://regexr.com?3031a –

+0

Tôi không thể tạo lại điều này. Chạy đoạn mã sau trong bảng điều khiển javascript '" foo chuyển sang 123 ".replace (/ ([^>]) (lần lượt \ s + thành \ s +) (\ d +) $/i," $ 1 $ 2 $ 3"); 'trả về' "foo chuyển sang 123" '. Bạn có thể đăng mã đang gây ra sự cố không. –

Trả lời

2

Tôi khá chắc chắn không có gì sai với regex này. Bạn phải nhận được văn bản sai như đầu vào currenttext. Bạn có thể xác minh điều này bằng cách kiểm tra currenttext trước khi chạy mã này (hoặc console.log (currenttext) hoặc alert (currenttext), hoặc một cái gì đó như thế).

Những điều cần tìm cho ra:

  • Bạn đang sử dụng substring (...) với (bắt đầu, kết thúc) thay vì (bắt đầu, kết thúc + 1)?
  • Bạn có khớp với ký tự cuối cùng dưới dạng một nhóm riêng biệt trong RegExp không?
+1

Tôi không biết mình đang ở đâu hoặc cái gì gây ra lỗi ... nhưng nó đã biến mất. Hãy nghĩ rằng nó là công bằng để nói rằng không có gì sai với regex anyway. – Beeblbrox

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