簡體   English   中英

正則表達式:匹配詞(但在OR之前或之后刪除逗號)

[英]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來實現我想要的

我聽說正則表達式可以做強大的東西,但無論我怎么努力,我都無法理解它

重要筆記:

  • 它應該在OR之前(不是兩者都)匹配,否則我們將以“ this,is,a,test”結尾
  • 逗號之間沒有空格

對於這種替換,比正則表達式更不易碎的東西怎么樣?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM