javascript - 使用 javascript 查找搜索词(片段)周围的单词

标签 javascript regex

我正在使用 jlinq 从一些 json 返回搜索结果我想向用户显示包含搜索词的结果文本片段,在搜索词前说三个词,在搜索词后说三个词。

var searchTerm = 'rain'
var text = "I'm singing in the rain, just singing in the rain";

结果会像“在雨中歌唱,只是歌唱”

我如何在 javascript 中执行此操作?我看过一些 suggestions using php ,但没有专门针对 javascript 的内容。

最佳答案

这是一个稍微好一点的近似值:

function getMatch(string, term)
{
    index = string.indexOf(term)
    if(index >= 0)
    {
        var _ws = [" ","\t"]

        var whitespace = 0
        var rightLimit = 0
        var leftLimit = 0

        // right trim index
        for(rightLimit = index + term.length; whitespace < 4; rightLimit++)
        {
            if(rightLimit >= string.length){break}
            if(_ws.indexOf(string.charAt(rightLimit)) >= 0){whitespace += 1}
        }

        whitespace = 0
        // left trim index
        for(leftLimit = index; whitespace < 4; leftLimit--)
        {
            if(leftLimit < 0){break}
            if(_ws.indexOf(string.charAt(leftLimit)) >= 0){whitespace += 1}
        }
        return string.substr(leftLimit + 1, rightLimit) // return match
    }
    return // return nothing
}

这有点“贪婪”,呵呵,但它应该可以解决问题。注意 _ws 数组。您可以包含您喜欢的所有空格或修改以使用正则表达式检查空格。

这已被略微修改以处理短语。它只会找到该术语的第一次出现。处理多次出现需要稍微不同的策略。

我想到你想要的也可以(在不同程度上)通过以下方式实现:

function snippet(stringToSearch, phrase)
{
    var regExp = eval("/(\\S+\\s){0,3}\\S*" + phrase + "\\S*(\\s\\S+){0,3}/g")
    // returns an array containing all matches
    return stringToSearch.match(regExp)
}  

唯一可能的问题是,当它抓取第一次出现的模式时,它会切掉匹配的部分,然后再次搜索。您还需要注意“短语”变量中没有任何正则表达式字符(或将其转换为十六进制或八进制表示形式)

无论如何,我希望这对男人有帮助! :)

关于javascript - 使用 javascript 查找搜索词(片段)周围的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159532/

相关文章:

java - java中如何实现正则表达式替换功能?

PHP Regex 查找字符串中所有大写的单词

python - 将 re.search 函数应用于 Python 中的列

c# - 用于查找不属于超链接的文本的正则表达式

php - 从 PHP 调用 JavaScript 函数的问题

javascript - 使用 jquery 将背景颜色添加到选项

javascript - 当我们向上滚动时,两个 div 缩小并且其他 div 变大

javascript - meteor .js/MongoDB : finding a document's place in a collection

javascript - 字段计算

regex - 如何使用正则表达式验证电话号码