我需要一种方法来将单词与字符串匹配,并且不会出现误报。让我举一个例子说明我的意思:
基本上,如果第一个字符串和第二个字符串中都有确切的字符,则应该匹配,但如果第二个字符串中有完整符(例如thing_foo
中的下划线),则应该匹配。
现在,我正在执行此操作,该操作不起作用。
let found = b.includes(a); // true
希望我的问题很清楚。感谢您的帮助!
答案 0 :(得分:2)
男孩把它变成了经典的XY Problem。
如果我不得不猜测,您想知道路径是否包含特定段。
在这种情况下,请在positive lookahead上将字符串拆分为'/'
,然后使用Array.prototype.includes()
const paths = ["/a/thing", "/a/thing/that/is/here", "/a/thing_foo"]
const search = '/thing'
paths.forEach(path => {
const segments = path.split(/(?=\/)/)
console.log('segments', segments)
console.info(path, ':', segments.includes(search))
})
使用正向超前表达式/(?=\/)/
可使我们在/
上拆分字符串,同时在每个段中保留/
前缀。
或者,如果您仍然热衷于使用直接的正则表达式解决方案,那么您会想要这样的东西
const paths = ["/a/thing", "/a/thing/that/is/here", "/a/thing_foo", "/a/thing-that/is/here"]
const search = '/thing'
const rx = new RegExp(search + '\\b') // note the escaped backslash
paths.forEach(path => {
console.info(path, ':', rx.test(path))
})
请注意,如果搜索字符串后接连字符或代字号,则它们将返回假阳性,因为这些字符被视为单词边界。您将需要一个更复杂的模式,我认为第一个解决方案可以更好地处理这些情况。
答案 1 :(得分:1)
我建议使用正则表达式...
例如以下正则表达式/\/thing$/
-匹配以/thing
结尾的任何内容。
console.log(/\/thing$/.test('/a/thing')) // true
console.log(/\/thing$/.test('/a/thing_foo')) // false
更新:要使用变量...
var search = '/thing'
console.log(new RegExp(search + '$').test('/a/thing')) // true
console.log(new RegExp(search + '$').test('/a/thing_foo')) // false
答案 2 :(得分:0)
只需使用以下正则表达式即可
var a = "/a/thing";
var b = "/a/thing/that/is/here";
var c = "/a/thing_foo";
var pattern = new RegExp(/(:?(thing)(([^_])|$))/);
pattern.test(a) // true
pattern.test(b) // true
pattern.test(c) // false