2013-04-22 76 views
13

Tôi có chuỗi có đường dẫn tệp. Tôi muốn thay thế tất cả các dấu chéo ngược đơn ("\") bằng dấu gạch chéo ngược kép ("\\").Thay thế dấu chéo ngược đơn "" bằng dấu gạch chéo ngược kép "\"

var replaceableString = "c:\asd\flkj\klsd\ffjkl"; 
    var part = /@"\\"/g; 
    var filePath = replaceableString .replace(part, /@"\\"/); 
    console.log(filePath); 

Bàn điều khiển hiển thị cho tôi.

c:asdlkjklsdfjkl 

Tôi đã tìm thấy điều gì đó như thế này, rất tiếc là nó không hoạt động. Replacing \ with \\

+1

'' 'làm gì trong đó? – Jon

+5

Chuỗi của bạn không chứa \ –

+0

Hãy xem xét một số sự giàu có khổng lồ của các mẫu regex JavaScript trên mạng. Đây không phải là vấn đề duy nhất đã được giải quyết nhiều lần. Khó tin rằng viết ra một câu hỏi tốn ít thời gian hơn là tìm kiếm chính mình * ngay cả khi *. – Tomalak

Trả lời

7
var replaceableString = "c:\asd\flkj\klsd\ffjkl"; 
alert(replaceableString); 

này sẽ cảnh báo bạn c:asdlkjklsdfjkl vì '\' là một nhân vật chạy thoát mà sẽ không được xem xét.

Để có một dấu chéo ngược trong chuỗi của bạn, bạn nên làm một cái gì đó như thế này ..

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl"; 
alert(replaceableString); 

này sẽ cảnh báo bạn c:\asd\flkj\klsd\ffjkl

JS Fiddle

Learn about Escape sequences here

Nếu bạn muốn của bạn chuỗi để có '\' theo mặc định, bạn nên thoát khỏi nó .. Sử dụng hàm escape()

var replaceableString = escape("c:\asd\flkj\klsd\ffjkl"); 
alert(replaceableString); 

JS Fiddle

6

Hãy thử:

var parts = replaceableString.split('\\'); 
    var output = parts.join('\\\\'); 

Cá nhân, như tôi không quá chuyên gia trong exps reg, tôi có xu hướng để tránh cho họ khi đối phó với các ký tự không tự chữ và số, cả hai đều do khả năng đọc và để tránh sai lầm kỳ lạ.

4

\ là ký tự thoát. Do đó replaceableString không chứa bất kỳ dấu gạch chéo ngược nào.

Để khắc phục điều này, bạn nên khai báo chuỗi như thế này:

var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl"; 
+0

Thực tế là người dùng nhập chính đường dẫn đó trong trường nhập. Xử lý dòng được quản lý trong thời gian thực và thay thế tất cả phím được nhấn "\"? – PilgrimViis

+0

@ user2075057 Làm cho người dùng rõ ràng nhập đường dẫn với '\' để bạn muốn nó giữ nguyên trong chuỗi của bạn ... ?? Ý tôi là không trốn thoát ... ?? –

+0

@Prasath K Tôi muốn hiển thị nội dung nào đó từ tệp bằng mã java của tôi. – PilgrimViis

6

Bạn có một vài vấn đề trong mã của bạn.

  1. Để nhận số \ trong biến chuỗi, bạn cần phải thoát khỏi nó.

    Khi bạn tạo chuỗi như sau: replaceableString = "c:\asd\flkj\klsd\ffjkl"; ký tự có \ trước khi được coi là chuỗi thoát. Vì vậy, trong quá trình tạo chuỗi, nó cố gắng diễn giải chuỗi thoát \a, vì điều này không hợp lệ nên lưu trữ a vào chuỗi. Ví dụ. \n sẽ được hiểu là dòng mới.

  2. Tôi giả định @ đến từ ví dụ .net. Javascript không biết chuỗi "thô".

  3. xóa dấu ngoặc kép khỏi regex của bạn.

Điều này sẽ làm những gì bạn muốn:

var string = "c:\\asd\\flkj\\klsd\\ffjkl"; 
var regex = /\\/g; 
var FilePath = string.replace(regex, "\\\\"); 
0

Nếu bạn không có quyền kiểm soát các nội dung của chuỗi bạn đang cố gắng tìm những dấu xồ nguợc trong, và nó chứa SINGLE \ giá trị (biến ví dụ. myPath chứa C:\Some\Folder\file.jpg), sau đó bạn thực sự có thể tham khảo các dấu gạch chéo ngược đơn trong JavaScript là String.fromCharCode(92).

Vì vậy, để lấy tên tệp trong ví dụ về tệp của tôi ở trên.

var justTheName = myPath.split(String.fromCharCode(92)).pop(); 
0

Trong trường hợp khớp chuỗi, tốt hơn nên sử dụng encodeURIComponent, decodeURIComponent.

match(encodeURIComponent(inputString)); 

function match(input) 
{ 

for(i=0; i<arr.length; i++) 
{ 
if(arr[i] == decodeURIComponent(input)) 
return true; 
else return false; 
} 
} 
0

Trong trường hợp một dấu gạch chéo ngược trong chuỗi, phương pháp thay thế javascript không cho phép tôi thay thế dấu gạch chéo ngược đơn.

Thay vào đó tôi đã phải sử dụng phương pháp phân chia mà trả về một mảng của chuỗi phân chia và sau đó nối các dây mà không cần dấu back slash (hoặc bất cứ điều gì bạn muốn thay thế nó với)

Solution (backslash thay thế bằng dấu gạch dưới) :

var splitText = stringWithBackslash.split('\\'); 
var updatedText = splitText[0] + '_' + splitText[1]; 
0

mã hóa đầu tiên chuỗi

sau đó thay thế tất cả các lần xuất hiện của% 5C với% 5C% 5C

Ở cuối, giải mã chuỗi

var result = encodeURI(input); 
result=decodeURI(result.replace(/%5C/g,"%5C%5C")); 
Các vấn đề liên quan