匹配包含特殊字符的整个单词的Javascript正则表达式
我想使用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++既是单词的前面,也是单词的结尾。
如果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));
您可以添加一个RA后字字符接受字符([+#]
)的NGE:
str = 'I know C++too. I know Java and C#.';
console.log(str.match(/(\w[+#]+|\w+)/g));
NB:\w[+#]+
必须首先放置在交替表达优先于更一般的\w+
。
我需要一个例子,将一个变量“文本”带入正则表达式 – changus
所以你想匹配单词和字符串“C++”?或者更一般的东西? – qxz
'new RegExp('\\ b'+'I know C \\ + \\ +'+'(?!\\ w)','gi')' – Visman
更普遍的东西。如果text =“C++”,我希望它匹配“我知道C++”。但不是“我也知道C++”。 – changus