我正在尝试检查单词是否在字符串中,现在我已经走了很远。
当单词test
后面有或没有特殊字符时,下面的代码可以正常工作。
现在我想让它检查字符串前面的1个字符,这是字符@
所以每当字符串@test
时它必须匹配。
//THIS RETURNS FALSE WHICH IS NOT GOOD
var str = "Mr. @test has a blue house";
var match = "@test";
var b = new RegExp('\\b' + match + '(?:es|s)?\\b');
var n = b.test(str);
console.log('test 1 ' + n);
//THIS RETURNS BACK TRUE WHICH IS GOOD
var str = "Mr. test! has a blue house";
var match = "test";
var b = new RegExp('\\b' + match + '(?:es|s)?\\b');
var n = b.test(str);
console.log('test 2 ' + n);
答案 0 :(得分:1)
答案 1 :(得分:0)
因此,\b
和\B
有点棘手。要理解它们,您需要了解以下概念:
\w
匹配单个"字符",表示任何基本ASCII字母a
到z
或A
到{{1} },或任何基本ASCII数字Z
到0
,或下划线9
。_
匹配单个"非单词字符",表示任何不是单词字符的字符。\W
匹配"字边界",表示字符串中与一个单词字符相邻的点。例如,在\b
中,"yes."
之前有一个单词边界,y
后面有一个单词边界。s
匹配"非字边界",表示字符串中不字边界的点。例如,在\B
中,"yes."
和y
之间以及e
和e
之间存在非字边界。幸运或其他方式,听起来 匹配你想要的东西;您认为s
是"字",但就@test
和\w
以及\W
和\b
而言,这个词有\B
。
因此,您需要首先正式确定" word"的概念,然后才能实现这一概念。