Javascript在字符串中查找单词的索引(不是单词的一部分)
Posted
技术标签:
【中文标题】Javascript在字符串中查找单词的索引(不是单词的一部分)【英文标题】:Javascript find index of word in string (not part of word) 【发布时间】:2012-09-28 05:49:24 【问题描述】:我目前正在使用str.indexOf("word")
在字符串中查找单词。
但问题是它还返回了其他单词的一部分。
示例:“我去了 foobar 并点了 foo。” 我想要单个单词“foo”的第一个索引,而不是 foobar 中的 foo。
我无法搜索“foo”,因为有时它后面可能会跟一个句号或逗号(任何非字母数字字符)。
【问题讨论】:
您有六个问题没有被接受的答案。返回并接受一个答案,人们就会愿意在这个答案上发帖。 好的,谢谢,我不知道我有一个名为“user759885”的永久帐户,我已经完成了。 【参考方案1】:我已经尝试过使用“.search”和“.match”,正如前面的答案中所建议的那样,但只有这个解决方案对我有用。
var str = 'Lorem Ipsum Docet';
var kw = 'IPSUM';
var res = new RegExp('\\b('+kw+')\\b','i').test(str);
console.log(res); // true (...or false)
使用 'i' 进行不区分大小写的搜索。
ComFreek写了详细回答here
【讨论】:
【参考方案2】:对于一般情况,使用 RegExp 构造函数创建以单词边界为界的正则表达式:
function matchWord(s, word)
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
请注意,连字符被视为单词边界,因此 sun-dried 是两个单词。
【讨论】:
【参考方案3】:您必须为此使用正则表达式:
> 'I went to the foobar and ordered foo.'.indexOf('foo')
14
> 'I went to the foobar and ordered foo.'.search(/\bfoo\b/)
33
/\bfoo\b/
匹配被单词边界包围的foo
。
要匹配任意单词,请构造一个RegExp
对象:
> var word = 'foo';
> var regex = new RegExp('\\b' + word + '\\b');
> 'I went to the foobar and ordered foo.'.search(regex);
33
【讨论】:
尝试了一个一般案例,但我的实现似乎不起作用。reg = '/\b' + word+ '\b/'; str.indexOf(reg);
如果你想编写正则表达式,你需要两个步骤:双花键 "\" ("\\b") 并调用 RegExp 构造函数:reg = new RegExp("\\b" + word + "\\b");
啊,我看到 indexOf 不使用正则表达式,所以你使用了search()
。我的最终解决方案是使用reg = '\\b(' + word + ')\\b';
str.indexOf(reg);
@user759885:查看我的编辑。您必须构造一个 RegExp
对象。
@Blender FYI \\b
javascript 中的边界不适用于非英语但其他完美的字母数字字符,如 à、é、ö。 new RegExp("\\bestá\\b").test('¿dónde está la alcaldesa?')
返回 False
,但奇怪的是 new RegExp("\\bdónde\\b").test('¿dónde está la alcaldesa?')
返回 True。以上是关于Javascript在字符串中查找单词的索引(不是单词的一部分)的主要内容,如果未能解决你的问题,请参考以下文章
使用数组在字符串中查找特定单词(JavaScript)[重复]