如何在JavaScript中获取找到的字符串的周围文本?

时间:2012-06-03 17:37:05

标签: javascript regex string

这是一个菜鸟问题

假设我在字符串S中搜索模式P。现在我想显示字符串的子字符串,它围绕P。子字符串应该只有一行(即N个字符)并包含整个字。你会如何在JavaScript编码?

例如:
S =“Hello world,欢迎来到宇宙”,P =“welcome”,N = 15.天真的解决方案给出“ld,welcome to”(添加4个字符)在P之前和之后。我想把它“圆”到“世界,欢迎来到”。

正则表达式可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

这是你想要的正则表达式:

/\s?([^\s]+\swelcome\s[^\s]+)\s?/i    //very simple, no a strange bunch of [] and {}

说明:

您要匹配的内容实际上是

  

“世界,欢迎来到”

没有前后的空格,因此:

\s?       //the first space (if found)
(         //define the string position you want
[^\s]+    //any text (first word before "welcome", no space)
\s        //a space
welcome   //you word
\s        //a space
[^\s]+    //the next world (no space inside)
)         //that's it, I don't want the last space
\s?       //the space at the end (if found)

申请:

function find_it(p){
    var s = "Hello world, welcome to the universe",
        reg = new RegExp("\\s?([^\\s]+\\s" + p + "\\s[^\\s]+)\\s?", "i");

    return s.match(reg) && s.match(reg)[1];
}

find_it("welcome");   //"world, welcome to"

find_it("world,");    //"Hello world, welcome"

find_it("universe");  //null (because there is no word after "universe")

答案 1 :(得分:1)

我想,这就是你正在寻找的东西。

$a = ($n - length of $p)/2
/[a-zA-Z0-9]{$a}$p[a-zA-Z0-9]{$a}/

我用美元来显示变量的位置。您没有提供足够的代码来编写具体示例。