2015-12-14 38 views
0

如何使用JavaScript編程語言匹配以下模式?使用JavaScript在任何地方使用新行匹配確切單詞

樣品(未在sampleword樣品)

SAM \ NPLE

SA \ nmple

我用\ b對於邊界全字匹配。 我試圖找到一種有效的方式來執行換行符匹配任何地方的單詞。 對於情況2:\ bsam [\ s \ S] ple \ b起作用。 同樣可以適應case3以及匹配。

但是,有沒有辦法讓單一模式匹配所有這些?

+2

你嘗試過這麼遠嗎?提供你的代碼的相關部分,所以我們有一些開始。 – user1438038

+0

考慮查看字符串函數和/或正則表達式並回到此處。 – BlackVegetable

+0

我只是在問題 – Vsoma

回答

1

它看起來像你問如何匹配一個字符串與單個可選空間任何地方在字符串?如果是這樣,看起來像這樣:

function getRegEx(word) { 
    var patterns = word.split('').map(function (letter, index) { 
    return (
     word.slice(0, index) + 
     '\\s?' + 
     word.slice(index) 
    ) 
    }) 
    patterns.shift() 
    return new RegExp('^' + patterns.join('|') + '$'); 
} 

getRegEx('pattern').test('pat tern') // --> true 

但是,如果能在字符串中的多個空格(如的放大器樂「),那麼這將是如下:

function getRegEx(word) { 
    word = word.split('') 
    word = word.map(function (letter) { 
    return letter + '\\s?' 
    }) 
    return new RegExp('^' + word.join('') + '$') 
} 

getRegEx('pattern').test('pat tern') // --> true 

根據OP的要求(請參閱意見):

如果要查找無限數量的空格字符,請將true傳遞給以下函數(作爲第二個參數)。否則,它只會找到一個:

function getRegEx(word, mult) { 
    var spaceCount = mult ? '*' : '?' 
    word = word.split('') 
    word = word.map(function (letter) { 
    return letter + '\\s' + spaceCount 
    }) 
    return new RegExp('^' + word.join('') + '$') 
} 

getRegEx('pattern', true).test('pat  tern') // --> true 

如果要指定在圖案空間可能會出現,可以做如下:

function getRegEx(word, mult) { 
    word = word.split('') 
    var spaceCount = mult ? '*' : '?' 
    var positions = [] 
    word.forEach(function (char, index) { 
    if (char === ' ') positions.push(index) 
    }) 
    positions.forEach(function (pos) { 
    word.splice(pos, 1, '\\s' + spaceCount) 
    }) 
    return new RegExp('^' + word.join('') + '$') 
} 

把一個空間,在你的模式字符串無論你想要哪裏都有空間匹配。如:

getRegEx('p at tern', true).test('p at tern') // --> true

+0

中提供了更多信息。除非您計劃添加更多符號,否則不需要將一個構造放入字符類中。 –

+0

括號不是必需的,但不會造成傷害。我真的認爲在查看RegExp.source字符串時它更清晰。但有你的方式。 –

+0

這並不是說我有這個問題,但是,有沒有一種方法可以在模式本身中指定在單詞的任何位置查找0個或更多個空格字符? – Vsoma

1

可以使用replace刪除\n和比較,爲sample使用單詞邊界:

/\bsample\b/i.test('sa\nmple'.replace(/\n/g, '')) 
true 
/\bsample\b/i.test('sam\nple'.replace(/\n/g, '')) 
true 
/\bsample\b/i.test('sample'.replace(/\n/g, '')) 
true 
/\bsample\b/i.test('sample'.replace(/\n/g, '')) 
true 
/\bsample\b/i.test('some sam\nple'.replace(/\n/g, '')) 
true 
\bsample\b/i.test('sam\nples'.replace(/\n/g, '')) 
false 
相關問題