REGEX获取一系列特殊字符后的所有内容

问题描述 投票:1回答:3

我正在使用这个正则表达式来正确获取iddescription的值

\$\$id=(\w+)(?:&description=(\w+))?\$\$

示例:https://regex101.com/r/GZVlKf/1

我会修改这个正则表达式并在最后一个$$之后得到任何文本。我试过像|?<=/$/$).*$这样的东西但没有成功。你能指点我正确的方向吗?

测试数据:

$$id=uniq_id&description=some_description$$ Any text after
$$id=uniq_id$$ Any text after

$$id=uniq_id&description=some_description$$ Any text after

$$id=uniq_id$$ Any text after

Any text after

$$id=uniq_id&description=some_description$$ Any text after $$ dfjhdjfjkhjj $$


<input disabled="" type="checkbox"> Whatever
<input checked="" disabled="" type="checkbox"> Whatever
<input disabled="" type="checkbox"> $$id=uniq_id&amp;description=some_description$$ AX Whatever
<input checked="" disabled="" type="checkbox"> $$id=uniq_id$$ AX Whatever

<input disabled="" type="checkbox"> $$id=uniq_id&amp;description=some_description$$ AX Whatever
javascript regex
3个回答
1
投票

你可以用

/\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$([^$]*(?:\$(?!\$)[^$]*)*$)?/

regex demo

我在模式的末尾添加了([^$]*(?:\$(?!\$)[^$]*)*$)?,这是一个可选的捕获组匹配

  • [^$]* - 除了$之外的零个或多个字符
  • (?:\$(?!\$)[^$]*)* - 零次或多次出现 \$(?!\$) - 没有跟随另一个$$ [^$]* - 除了$之外的零个或多个字符
  • $ - 字符串的结尾。

0
投票

我不确定我是否正确理解了您的问题,但如果是这样,那么您可以在最后添加.*。我想你想要这样的东西:

\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$(.*)
                          Here-------------^^^^

这将捕获$$之后的整行,直到找到\n

Working demo

如果要捕获多行,则可以使用:

\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$([^$]*)

Working demo

注意:如果在最后一个$$之后文本中有文字$,则此方法将不匹配。如果你想捕获$,那么你可以使用Viktor的评论。


0
投票

你可以试试这个

\$\$id=(\w+)(?:&description=(\w+))?(?:.*)\$\$(.*)

说明

  • \$\$id= - 匹配$$id=
  • (\w+) =捕获组。匹配一个或多个角色。
  • (?:&description=(\w+))? - 匹配description=后跟一个或多个角色(捕获组)。 (?使它可选)。
  • (?:.*)非捕获组。除了换行符之外的任何时间都匹配任何时间。(贪婪模式)
  • \$\$ - 匹配最后一个$$
  • (.*)匹配除换行零或时间之外的任何内容。

Demo

© www.soinside.com 2019 - 2024. All rights reserved.