字符串的正则表达式解决方案

时间:2017-01-30 14:15:57

标签: javascript regex regex-lookarounds

我有以下字符串:

bla;bla;<span>bla</span>;bla;bla;hoblala;abla;blala;bla,bla,<span>bla</span>,bla,bla,hoblala,abla,blala,

我需要获得“bla”字样:

  • 不在范围内
  • 不在一个单词内(例如,“hoblala”,“abla”,“blala”......不应该被选中)

任何帮助?

编辑:

正则表达式我尝试过:(?!<)(?![a-z])bla

2 个答案:

答案 0 :(得分:0)

这应该有效。

<强> REGEXP:

((?:\w+\;)+)(?=<span>)

<强> INPUT:

bla;bla;<span>bla</span>;bla;bla;hoblala;abla;blala;bla,bla,<span>bla</span>,bla,bla,hoblala,abla,blala,

<强>输出:

bla;bla;

JAVASCRIPT代码:

&#13;
&#13;
const regex = /((?:\w+\;)+)(?=<span>)/gm;
const str = `bla;bla;<span>bla</span>;bla;bla;hoblala;abla;blala;bla,bla,<span>bla</span>,bla,bla,hoblala,abla,blala,`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
&#13;
&#13;
&#13;

请参阅: https://regex101.com/r/xAzXWh/3

答案 1 :(得分:0)

(?!<span[^>]*?>)(\b(bla)\b)(?![^<]*?<\/span>)就是我想出来的。

http://regexr.com/3f67j

它不是一个非常易读的正则表达式,但它完成了这项工作。

我想我更愿意将其分解为两种不同的方法。一个使用Regex匹配整个bla单词,然后使用HTML解析器删除HTML单元中包含的任何单词。