2016-12-17 258 views
1

我想使用JavaScript正則表達式匹配整個確切的單詞。匹配包含特殊字符的整個單詞的Javascript正則表達式

鑑於字符串:1)「我知道C++。」 2)「我認識Java」。

我嘗試過使用new Regex('\\b' + text + '\\b', 'gi'),這對於沒有特殊字符(例如#2)的單詞很有用。

我也採取了看看這個網址: Regular expression for matching exact word affect the special character matching

並實現了:

​​

,並且將匹配text = 'C++'(它會匹配這兩個例子)

然而,如果有人輸入了一個錯字,並且字符串是「我也知道C++」,那麼後一個正則表達式在我不需要時仍然會匹配C++,因爲「C++ too」是n完全匹配text = 'C++'

我可以做些什麼改變,使它不匹配,除非C++既是單詞的前面,也是單詞的結尾。

+0

所以你想匹配單詞和字符串「C++」?或者更一般的東西? – qxz

+0

'new RegExp('\\ b'+'I know C \\ + \\ +'+'(?!\\ w)','gi')' – Visman

+0

更普遍的東西。如果text =「C++」,我希望它匹配「我知道C++」。但不是「我也知道C++」。 – changus

回答

0

使用此((?:(?:\w)+?)(?=\b|\w[-+]{2,2})(?:[-+]{2,2})?)

,我們提供了一個例子也-象徵。看到它in life

enter image description here

+3

'(?:\ w)'與'\ w'相同。 「{2,2}」與「{2}」相同。 – melpomene

1

如果whole words including special characters意味着一切[\r\n\t\f\v ],你可以簡單地做:

const REGEX = /([^\s]+)+/g; 

function selectWords(string) { 
 
    const REGEX = /([^\s]+)+/g; 
 
    
 
    return string 
 
    
 
    // remove punctuation 
 
    .replace(/[^a-z0-9\s+#]/ig, "") 
 
    
 
    // perform the match 
 
    .match(REGEX) 
 

 
    // prevent null returns 
 
    || [] 
 
    ; 
 
} 
 

 
var text = "Hello World" 
 
var [first, second, ...rest] = selectWords(text); 
 
console.log(1, {first, second, rest}); 
 

 

 
// example with punctuation 
 
var text = "I can come today, she said, but not tomorrow." 
 
var [first, second, third, ...rest] = selectWords(text); 
 
console.log(2, {first, second, third, rest}); 
 

 

 
// example with possible throw 
 
var text = ",.'\"` \r" 
 
var [first, second, third, ...rest] = selectWords(text); 
 
console.log(3, {first, second, third, rest}); 
 

 
// example with a specific word to be matched 
 
function selectSpecificWord(string, ...words) { 
 
    return selectWords(string) 
 
    .filter(word => ~words.indexOf(word)) 
 
    ; 
 
} 
 
var expected = "C++"; 
 
var test = "I know C++"; 
 
var test1 = "I know C++AndJava"; 
 

 
console.log("Test Case 1", selectSpecificWord(test, expected)); 
 
console.log("Test Case 2", selectSpecificWord(test1, expected));

+0

我需要一個示例,將正文中的變量「text」帶入正則表達式 – changus

+0

(已編輯)您可以點擊底部的Run code snippet按鈕查看它。 – Hitmands

1

您可以添加一個RA後字字符接受字符([+#])的NGE:

str = 'I know C++too. I know Java and C#.'; 
 
console.log(str.match(/(\w[+#]+|\w+)/g));

NB:\w[+#]+必須首先放置在交替表達優先於更一般的\w+

+0

我需要一個例子,將一個變量「文本」帶入正則表達式 – changus

相關問題