2016-04-21 68 views
0

我試圖用這個正則表達式來獲取所選文件的唯一名稱:獲得所選擇的輸入文件的名稱即可

var regex = /.*(\/|\\)/; 

但它只是在某些情況下工作,你可以找到完整的例子在this fiddle

var regex = /.*(\/|\\)/; 

var path1 = 'C:\fakepath\filename.doc'.replace(regex, ''), 
    path2 = 'C:\\fakepath\\filename.doc'.replace(regex, ''), 
    path3 = '/var/fakepath/filename.doc'.replace(regex, ''); 

如何解決這個問題?

+0

您能否澄清您對給定輸入的期望輸出類型?一個例子會很棒。 –

+0

你可以試試[Regex101](https://regex101.com/)這是一個很棒的正則表達式測試器。 –

+0

OP,請不要只鏈接到您的代碼,請在您的問題中寫下相關部分。 –

回答

3

你的問題不在於你認爲它的地方。

你的問題在於書面your literal string

'C:\fakepath\filename.doc'不使\字符,但\f之一(換頁)。

這是說,當你想提取字符串不使用replace,但match,這樣就可以定義的,而不是你不想要的東西,你想要什麼:

var regex = /[^\/\\]+$/; 

var path1 = 'C:\\fakepath\\filename.doc'.match(regex)[0], 
    path2 = 'C:\\fakepath\\filename.doc'.match(regex)[0], 
    path3 = '/var/fakepath/filename.doc'.match(regex)[0]; 
-1

使用基本名稱功能。事情是這樣的:

var path1 = 'C:\fakepath\filename.doc', 
    path2 = 'C:\\fakepath\\filename.doc', 
    path3 = '/var/fakepath/filename.doc'; 

function basename(path) 
{ 
    // remove everything before the 
    // last forward or backward slash. 
    return path.replace(/^.*[\/\\]/, ''); 
} 

console.log(basename(path1)); 
console.log(basename(path2)); 
console.log(basename(path3)); 

輸出控制檯以下:

C:akepathilename.doc 
filename.doc 
filename.doc 

爲路徑1的輸出並不像你期望它,因爲這個問題丹尼斯·塞居勒解釋的,他基本上說\是一個逃避角色。看看here

祝你好運!