2016-09-25 61 views
0

我需要一個JS正則表達式,它將查找未包含任何相等單詞字符的單詞字符的匹配項。例如,如果我們正在尋找b應該匹配ABAUBU和不應該ABCBCA正則表達式:找出符號是否包含相同的符號

給定字符串中的所有字符爲小寫英文字母,這是交替(例如我們可以有但不能BBAA)。

我嘗試使用lookarounds這樣的:

/b(?=a)/g 

但我沒弄清楚我怎麼更換一個讓大家知道,這是同一個符號,在左邊和b的右側。任何見解都值得讚賞。

+1

你是矛盾自己,你呢想匹配'aba'還是'abc'?你是指文學'b'還是任何角色? – MarZab

+0

* ababa *在那裏你有2個aba + 1x bab wich比賽嗎?因爲它們相交,但RegEx不匹配。你需要更精確地根據你的規格來選擇你想要的。你想要建立什麼? *編輯:*那麼* bbb *?在這裏你也有一個人物被兩個相似的人物包圍,只有他們是同一個人物;中間和周圍。 – Thomas

+0

@MarZab對不起,如果我不清楚,但我沒有看到上述任何矛盾。它應該匹配文學b。它應該與aba匹配(因爲左側有一個「a」,「b」右側有「a」),但不應該匹配「abc」,因爲左側有一個「a」, right –

回答

2

使用正則表達式如下:

(.)(b)(?=\1) 

你能匹配這些類型的字符。如果你需要操縱包圍b當時的你可以這樣的代碼是:

> "aabb aba".replace(/(.)(b)(?=\1)/g, function(match, p1, p2) { 
    return p1 + 'c'; 
}); 
< "aabb aca" 
0

你可能會做如下;

var found = "abaubuiyiatbzsgegestsabn".match(/(\w)[^\1]\1/g); 
 
console.log(found);

然後,如果你想獲得的所有隔行掃描模式,例如在"abaubuiyiatbzsgegestsabn"你不應該只得到"geg""ege"

var str = "abaubuiyiatbzsgegestsabn".split(/(\w)(?=[^\1]\1)/g) 
 
            .slice(1) 
 
            .reduce((p,c,i,a) => i&1 ? (p[p.length-1] += (a.slice(i) 
 
                        .join("") 
 
                        .slice(0,2)),p) : p.concat([[c]]) ,[]); 
 
console.log(str);