【问题标题】:Regex solution for string字符串的正则表达式解决方案
【发布时间】:2023-03-14 14:54:02
【问题描述】:

我有以下字符串:

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

【问题讨论】:

  • 使用解析器代替正则表达式
  • 任何示例或我可以找到示例的地方?谢谢!
  • Creating a DOMParser 你仍然可以使用正则表达式解析,但它似乎效率较低。如果您正在处理复杂的 HTML DOM,
  • 如果人们将他们尝试过的代码发布到他们的问题中,我会很高兴......

标签: javascript regex regex-lookarounds


【解决方案1】:

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

http://regexr.com/3f67j

这不是一个可读性很强的正则表达式,但它可以完成工作。

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

【讨论】:

  • 非常感谢@Dave!这做了我需要的:D
  • 不用担心。它也将匹配bla-bla(因为单词边界包括-),但如果这不是你想要的,调整它以排除它应该不会太难:)
  • 在我的情况下,我永远不会有 bla-bla,所以对我来说应该有任何麻烦。再次感谢您的回答!你已经非常感谢了! :D
【解决方案2】:

这应该可行。

正则表达式:

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

输入:

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

输出:

bla;bla;

JAVASCRIPT 代码:

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}`);
    });
}

见:https://regex101.com/r/xAzXWh/3

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2021-02-13
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多