2010-03-19 19 views
26

đây là chuỗi của tôi:javascript và backslashes thay

var str = "This is my \string"; 

Đây là mã của tôi:

var replaced = str.replace("/\\/", "\\\\"); 

tôi có thể không nhận được đầu ra của tôi là:

"This is my \\string" 

Tôi có đã thử mọi kết hợp mà tôi có thể nghĩ đến cho cụm từ thông dụng và giá trị thay thế.

Mọi trợ giúp đều được đánh giá cao!

Trả lời

29

Chuỗi không chứa dấu gạch chéo ngược, nó chứa chuỗi thoát \s.

var str = "This is my \\string"; 

Và nếu bạn muốn biểu thức chính quy, bạn nên có cụm từ thông dụng, không phải là một chuỗi.

var replaced = str.replace(/\\/, "\\\\"); 
+3

var thay thế = str.replace (/ \\/g, "\\\\"); không thtat cờ/g toàn cục là cần thiết, nhưng nếu bạn muốn thay thế mọi trường hợp dấu gạch chéo ngược, thì đây là cách bạn thực hiện. – DaveH

7

Vấn đề là \ trong dòng đầu tiên của bạn thậm chí không được nhận ra. Nó cho rằng dấu gạch chéo ngược sẽ đánh dấu một chuỗi thoát, nhưng \ s không phải là một ký tự thoát, vì vậy nó bị bỏ qua. Đường var của bạn được hiểu là "Đây là chuỗi của tôi". Hãy thử str.indexOf("\\") - bạn sẽ thấy nó là -1, vì không có dấu gạch chéo ngược nào cả. Nếu bạn kiểm soát nội dung của str, làm những gì David nói - thêm một \ để thoát khỏi cái đầu tiên.

+0

Vấn đề là tôi không kiểm soát giá trị. Đường dẫn cửa sổ thực tế mà tôi đang xử lý (\ wp-content \ photos \ image123.jpg). Chuỗi được gán cho tôi là "\ wp-content \ photos \ image123.jpg" nhưng tôi không thể làm bất cứ điều gì với nó bởi vì các dấu gạch chéo ngược biến mất. Tôi hiểu rằng họ đang được phân tích cú pháp như các nhân vật trốn thoát nhưng tôi không biết cách sửa nó. – Frankie

+1

Hoặc bạn đang nhận được JS bị hỏng (trong trường hợp bạn không thể sửa chữa nó) hoặc bạn đang nhận được một chuỗi trong một số ngôn ngữ khác và xuất nó vào JS mà không thoát ký tự đặc biệt đầu tiên, trong trường hợp bạn phải sửa chữa nó ở đó. – Quentin

+0

Đồng ý - cách duy nhất thoát chuỗi có thể nhận được vào một chuỗi là nếu chuỗi được xây dựng trong javascript. Nếu nó đến từ một trường biểu mẫu, đáp ứng ajax, chuỗi truy vấn, v.v., nó không cần phải thoát. Khi bạn nói "chuỗi được gán cho tôi là ..." - CÁCH nó được cung cấp cho bạn như thế nào? – Graza

0

tôi đã không cố gắng này, nhưng sau nên việc

var replaced = str.replace((new RegExp("\s"),"\\s"); 

Về cơ bản bạn không muốn thay thế "\", bạn muốn thay thế các nhân vật đại diện bởi "\ s" trình tự thoát.

Đáng tiếc là bạn sẽ cần phải làm điều này cho tất cả các chữ cái của bảng chữ cái, mỗi số, ký hiệu, vv để trang trải tất cả các căn cứ

+0

'" \ s "' là '" s "', do đó, điều này cũng sẽ nhận được bất kỳ ký tự nào khác. Bạn sẽ kết thúc tiền tố cho mỗi ký tự trong chuỗi bằng '\' trừ khi trình tự là một ký tự điều khiển. – Quentin

28

Chấn bối rối bởi điều này cho các lứa tuổi và tất cả các câu trả lời khẳng định rằng giữ chuỗi nguồn cần phải có dấu gạch chéo ngược đã thoát trong đó ... không phải luôn luôn như vậy.

Làm điều này ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92)); 
+1

Vì lợi ích của nhân loại, bạn nên lưu lại câu trả lời của mình, Nó vừa lưu lại ngày của tôi :) – iShaalan

2

Sử dụng này

str.replace(/(\s)/g,function($0){return $0==' '?' ':'\\s'}) 

hoặc

str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' '); 

'cái gì' nó có thể là một sự kết hợp các ký tự mà không có trong chuỗi

var str=' \s'; 
    str.replace(/\s/g,'\\s'); 
// return '\\s\\s' 
    str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' '); 
// return ' \\s' 
1

Trong trường hợp bạn có nhiều trường hợp hoặc dấu chéo ngược:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))