[英]Regex: match word (but delete commas after OR before)
我試圖從用逗號分隔的字符串中刪除一個項目:
var str="this,is,unwanted,a,test";
str.replace('unwanted','');
我最后有兩個逗號 str.replace('unwanted','').replace(',,','');
它可能會奏效 但問題來自str
是這樣的:
var str="unwanted,this,is,a,test"; // or "...,unwanted"
但是,我可以在[0或str.length] ==逗號'中執行'if char,然后將其刪除
但我真的認為這不是要走的路,荒謬我需要做2次替換和2次ifs來實現我想要的
我聽說正則表達式可以做強大的東西,但無論我怎么努力,我都無法理解它
重要筆記:
對於這種替換,比正則表達式更不易碎的東西怎么樣?
str = str
.split(',')
.filter(function(token) { return token !== 'unwanted' })
.join(',');
jsFiddle 。
但是如果你確信正則表達式是最好的方法......
str = str.replace(/(^|,)?unwanted(,|$)?/g, function(all, leading, trailing) {
return leading && trailing ? ',' : '';
});
(感謝Logan F. Smyth 。)
jsFiddle 。
由於Alex沒有在他的解決方案中解決這個問題,我想在某個地方獲得一個功能齊全的版本。
var unwanted = 'unwanted';
var regex = new RegExp('(^|,)' + unwanted + '(,|$)', 'g');
str = str.replace(regex, function(a, pre, suf) {
return pre && suf ? ',' : '';
});
動態構建正則表達式時,唯一要注意的是,“不需要的”變量中不能包含任何可以解釋為正則表達式模式的內容。
正如亞歷克斯所提到的,有更簡單的方法來解析這個問題。 除非必須,否則不要訴諸正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.