2013-09-21 60 views
8

Tôi có một chuỗi trong đó tôi cần phải thay thế tất cả các ký tự đặc biệt "~! @ # $%^& *() _ + =` {} [] | :; ' <>,. /? " và không gian với dấu gạch nối. Nhiều ký tự đặc biệt trong một hàng sẽ dẫn đến một dấu nối đơn.Regex để thay thế tất cả các ký tự đặc biệt và dấu cách trong chuỗi bằng dấu gạch nối

var mystring="Need [email protected]#$%^\" to /replace this*(){}{}|\><? with_new string "; 
// desired output: "Need-to-replace-this-with-new-string" 

Hiện nay, tôi đang sử dụng loạt bài này của replace() cuộc gọi:

return mystring.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-').replace(/\//g, "-"); 

Nhưng nó xuất ra này:

Need----------to/replace-this--------with-new-string; 

nơi nó thêm một gạch nối cho mỗi ký tự đặc biệt trong chuỗi ngoại trừ dấu gạch chéo.

+0

Xác định 'tất cả các ký tự đặc biệt' là tất cả các ký tự không phải là chữ và số không? Một tập hợp con của những người đó? Tại * rất * ít nhất bạn có thể gửi một chuỗi đầu vào ví dụ và chuỗi đầu ra, mà không có các hướng dẫn/yêu cầu có mặt trong một trong hai chuỗi không? Nó làm cho nó rất khó hiểu và cố gắng đọc/hiểu. –

+0

ký tự cần xóa "~! @ # $%^& *() _ + =' {} [] | \ :; '<>,. /? " và không gian và tất cả những thứ này nên được thay thế bằng dấu gạch nối, chuỗi là chữ số và số – user2643287

+0

Tất cả đều có dấu gạch ngang * đơn * ở những vị trí xuất hiện, hoặc với dấu gạch nối cho * mỗi ký tự * được thay thế? –

Trả lời

13

tôi muốn đề nghị:

var inputString = "[email protected]#$%^&*()_+=`{}[]|\:;'<>,./?Some actual text to keep, maybe...", 
    outputString = inputString.replace(/([[email protected]#$%^&*()_+=`{}\[\]\|\\:;'<>,.\/? ])+/g, '-').replace(/^(-)+|(-)+$/g,''); 
console.log(outputString); 

JS Fiddle demo.

7

Đi theo bình luận và ví dụ của bạn:

return mystring.trim().replace(/["[email protected]#$%^&*\(\)_+=`{}\[\]\|\\:;'<>,.\/?"\- \t\r\n]+/g, '-'); 

hoặc để thay thế tất cả ký tự không phải chữ và số:

return mystring.trim().replace(/[^a-z0-9]+/gi, '-'); 

Bạn cũng có thể thêm vào:

.replace(/^-+/, '').replace(/-+$/, ''); 

để giết tắt bất kỳ dấu gạch ngang hàng đầu hoặc dấu gạch ngang nào (tại thời điểm đó bạn không còn cần gọi số trim()).

Ví dụ:

function cleanUp(st) { 
 
    return st. 
 
    replace(/[^a-z0-9]+/gi, '-'). 
 
    replace(/^-+/, ''). 
 
    replace(/-+$/, ''); 
 
} 
 

 
var mystring="Need [email protected]#$%^\" to /replace this*(){}{}|\><? with_new string "; 
 

 
console.log(cleanUp(mystring));

+1

Câu hỏi thứ hai là câu trả lời rõ ràng :) – Tabares

+0

Cách thay thế các chuỗi unicode như घर-घरमा ग्यास पाइपः कार्यान्वयनको जिम्मा ओलीकै काँधमा –

+0

Đó là một câu hỏi khác và khó hơn. Tôi muốn đề nghị [hỏi] (https://stackoverflow.com/questions/ask) như một câu hỏi mới. –

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