2012-08-01 31 views
13

Tôi đang cố gắng sử dụng phần tách của javascript để lấy câu ra khỏi chuỗi nhưng giữ dấu phân tách ví dụ!?.Javascript RegExp để tách văn bản thành câu và giữ dấu phân tách

Cho đến nay tôi có

sentences = text.split(/[\\.!?]/); 

mà làm việc nhưng không bao gồm thời gian cài đặt kết thúc cho mỗi câu (.!?).

Có ai biết cách để thực hiện việc này không?

+1

'? 'cũng là một char đặc biệt trong RegExp vì vậy bạn cần phải thoát khỏi nó – rgvcorley

+3

Siêu ký tự như '.' và'? 'Mất ý nghĩa đặc biệt của chúng bên trong một lớp ký tự. Cách đúng để khớp một dấu chấm ('.'), dấu chấm than ('! '), Hoặc dấu hỏi ('? ') Là' [.!?] '. –

Trả lời

38

Bạn cần phải sử dụng kết hợp không chia.

Hãy thử điều này.

var str = "I like turtles. Do you? Awesome! hahaha. lol!!! What's going on????"; 
var result = str.match(/[^\.!\?]+[\.!\?]+/g); 

var expect = ["I like turtles.", " Do you?", " Awesome!", " hahaha.", " lol!!!", " What's going on????"]; 
console.log(result.join(" ") === expect.join(" ")) 
console.log(result.length === 6); 
+0

Wicked !! Cảm ơn rất nhiều. – daktau

+1

Bạn có thể sử dụng một phần tách: 'text.split (/ \ b (?! [\? \. \!]) /); ' \ b bảo nó chia nhỏ ranh giới từ, phần tiện lợi là giao diện tiêu cực -Được rồi. – bavo

+2

Regex sai. Nếu tôi gõ: "Cụm từ 1. Cụm từ 2. Cụm từ 3", "Cụm từ 3" bị vứt bỏ. –

5

Hãy thử điều này thay vì: -

sentences = text.split(/[\\.!\?]/); 

? là một char đặc biệt trong biểu thức thông thường vì vậy cần phải được thoát.

Xin lỗi tôi lỡ đọc câu hỏi của bạn - nếu bạn muốn giữ delimiters thì bạn cần phải sử dụng match không split thấy this question

+2

Chỉ cần một lưu ý nhỏ: các ký tự đặc biệt như '?' Không cần phải được thoát ra bên trong một lớp nhân vật (các dấu ngoặc vuông). – JoeRocc

6

Sau đây là một bổ sung nhỏ để câu trả lời của Larry mà sẽ phù hợp cũng câu paranthetical:

text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g); 

áp dụng trên:

text = "If he's restin', I'll wake him up! (Shouts at the cage.) 
'Ello, Mister Polly Parrot! (Owner hits the cage.) There, he moved!!!" 

ban:

["If he's restin', I'll wake him up!", " (Shouts at the cage.)", 
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"] 
+0

Bất kỳ ý tưởng nào để điều chỉnh điều này cho số thập phân? Ví dụ. "Ở đó, anh ấy đã chuyển 99,9% !!!" –

+1

Bạn đã bỏ lỡ '+' sau lớp ký tự dấu câu '[.!?]', Vì vậy nó sẽ không ghi lại ba dấu chấm than sau khi "anh ấy di chuyển". – Mogsdad

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