2015-05-06 45 views
3

我想從帶有js的字符串中去除無效字符。用於清理字符串值的Javascript正則表達式

我正則表達式是目前如下:

var newString = oldString.replace(/([^a-z0-9 ]+)/gi, ''); 

即找到任何東西,但AZ或0-9和空間獨立外殼,並用什麼代替 - 但是我還想允許下劃線(_),連字符( -)和點(.)。

我試圖更新我的正則表達式如下,但它沒有按預期工作 - 我做了更改後,我發現括號()的字符串沒有得到那些剝離?

var newString = oldString.replace(/([^a-z0-9 .-_]+)/gi, ''); 

我是否缺少一些簡單的東西?

+0

我總是使用正則表達式101來測試任何假設。 請參閱下面的鏈接。爲了示例的目的,我已將其設置爲多行 https://regex101.com/r/xY1aL3/1 – benembery

+0

@ benembery - 感謝您的鏈接 - 真正有用 - 從未遇到過 –

回答

4
var newString = oldString.replace(/([^a-z0-9 ._-]+)/gi, ''); 

               ^^ 

保持-末時,它形成了一個範圍逃避它。

var newString = oldString.replace(/([^a-z0-9 ._\-]+)/gi, ''); 
0

你必須逃脫點和連字符:放置。現在它形成了一系列.和。或者之間_可以[]之間時

var newString = oldString.replace(/([^a-z0-9 \.\-_]+)/gi, ''); 
+2

您還沒有在字符類中逃避一個點。 – collapsar

+2

實際上,點在字符範圍中沒有意義。破折號是罪魁禍首。 – Blixt

+0

[]你不需要在[]內跳過 – wallop

0

將文字短劃線最後放到字符類中,或者用反斜槓將其轉義。現在它允許ASCII範圍._

var newString = oldString.replace(/[^a-z0-9 ._-]+/gi, ''); 

旁註:你不需要,除非你儲存了比賽的東西括號(如果括號覆蓋了整個比賽,你不需要他們然後要麼,因爲\0指的是整場比賽)。

0

使用反斜槓進行轉義。 - _

這應該工作

.replace(/([^a-z0-9 \.\_\-]+)/gi, ''); 

ALSO ... 你也可以使用\ W來表示字母數字和undrescore

[a-zA-Z0-9_] == \w 
+0

你不需要逃跑.- _ – wallop

+0

我想也許你會這樣做。和連字號 –

+2

嗯,下面的vks提出了一個很好的觀點!可能會使用 - 將它用作範圍,因此您可能需要\ for - 但不適用。 – wallop

相關問題