【问题标题】:RegEX match everything outside square bracketsRegEX 匹配方括号外的所有内容
【发布时间】:2014-04-18 10:17:38
【问题描述】:

我正在使用 WP 编辑器,我想创建一个 RegEX 模式来匹配方括号外的所有内容,如下所示:

[foo]Some selected text here[/foo]More selected text here

并替换为

[foo][text_box text="Some selected text here"][/textbox][/foo]
[text_box text="More selected text here"][/textbox]

我设法匹配方括号内容使用

(\[(.*?)\])

我怎样才能匹配其他所有内容?

非常感谢您的帮助!

【问题讨论】:

    标签: regex wordpress regex-negation


    【解决方案1】:

    你的文字可以包含[吗?

    如果没有,你可以使用一些本着精神的东西

    ((?:\s*\[[^\]]+\])*)([^[]+)((?:\[[^\]]+\]\s*)*)
    
    (                    # first capturing group
        (?:              # non capturing group
            \s*          # might be whitespaces
            \[           # opening [
            [^\]]+       # anything except a closing ]
            \]           # closing ]
        )*               # zero or more times
    )
    ([^[]+)              # store in second capturing group any string that doesn't contain a [
    ((?:\[[^\]]+\]\s*)*) # catch tags in capture group 3
    

    替换成

    $1[text_box text="$2"][/textbox]$3
    

    这个想法是捕获不包含[ 的文本。当我们停止时,我们知道下一个字符将是一个[,所以这是一个标签,所以我们捕获每个连续的[...] 标签。之后又是文本,所以我们重新应用模式。

    如果字符串以标签开头,则文本之前的“标签捕获”只会使用一次。

    demo here

    【讨论】:

    • 太棒了!非常感谢你!它不会包含任何 [] 因为它们会被转义。我正在制作一个简码生成器。
    • @GrozavAlexIoan:糟糕......小心,当两个[foo][foo] 相邻时,旧的表达式会失效。已编辑。
    • 我有一个问题。如何在 javascript 中实现 \G 的东西?它似乎只在 php 中有效。
    • @GrozavAlexIoan 是的,\G 锚点在 javascript 中不存在...我编辑了我的答案和演示
    • 我真的感激不尽!我不能说你帮了我多少。非常感谢!
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多