除了两个案例之外,如何查找块内的所有内容

时间:2016-10-09 17:59:23

标签: javascript regex

如果不包含水果,如何从以下模式捕获水果 里面有芒果或葡萄?

输入:

<frutis>banana,apple,orrange,lichie</frutis>
<frutis>banana,apple,mango,lichie</frutis>
<frutis>banana,grapes,orrange,lichie</frutis>
<frutis>banana,apple,orrange,guava</frutis>

输出: 香蕉,苹果,orrange,lichie 假 假 香蕉,苹果,orrange,番石榴&LT;

我尝试了以下内容:

<frutis>([^mango|grapes]*)<\/frutis>

2 个答案:

答案 0 :(得分:1)

你可以使用负面预测,就像使用这个正则表达式一样:

2016-10-09T17:55:12.2253192Z Starting task: Compile SSIS Packages
2016-10-09T17:55:12.2253192Z Executing the following command-line. (workingFolder = C:\Agents\TFSBuild\_work\1\s\DataResync)
2016-10-09T17:55:12.2253192Z "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" SSIS_Sync\SSIS_Sync.dtproj /Build Development
2016-10-09T17:55:12.2253192Z Error message highlight pattern: 
2016-10-09T17:55:12.2253192Z Warning message highlight pattern: 
2016-10-09T17:55:12.2253192Z C:\Windows\system32\cmd.exe /c ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" SSIS_Sync\SSIS_Sync.dtproj /Build Development"
2016-10-09T17:55:12.6315610Z Finishing task: CmdLine

正如你所写,它不起作用,因为类<frutis>(?!.*mango)(?!.*grapes).*<\/frutis> 是关于匹配单个字符,而不是关于序列。此外,管道符号在类中没有特殊含义,它只是表示文字[.....]

注意:为了匹配XML结构中的数据,不建议使用正则表达式,而是使用DOM解析器。

答案 1 :(得分:0)

试试这个:

const regex = /<frutis>((?:(?!mango|grapes).)*)<\/frutis>/g;
const str = `<frutis>banana,apple,orrange,lichie</frutis>
<frutis>banana,apple,mango,lichie</frutis>
<frutis>banana,grapes,orrange,lichie</frutis>
<frutis>banana,apple,orrange,guava</frutis>`;
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}`);
    });
}

源代码:

{{1}}

我已经使用负面向前检测是否存在两个字符串。 可以找到完整的说明here