【发布时间】:2016-05-09 11:41:34
【问题描述】:
我写了一个正则表达式来匹配一些看起来像这样的标签:
@("hello, world" bold italic font-size="15")
我希望正则表达式匹配这些字符串:['hello, world', 'bold', 'italic', 'font-size="15"']。
但是,只有这些字符串匹配:['hello, world', 'font-size="15"']。
其他例子:
- (成功)
@("test") -> ["test"] - (成功)
@("test" bold) -> ["test", "bold"] - (失败)
@("test" bold size="15") -> ["test", "bold", 'size="15"']
我尝试过使用这个正则表达式:
\@\(\s*"((?:[^"\\]|\\.)*)"(?:\s+([A-Za-z0-9-_]+(?:\="(?:[^"\\]|\\.)*")?)*)\s*\)
分解版本:
\@\(
\s*
"((?:[^"\\]|\\.)*)"
(?:
\s+
(
[A-Za-z0-9-_]+
(?:
\=
"(?:[^"\\]|\\.)*"
)?
)
)*
\s*
\)
正则表达式正在尝试
- 匹配序列的开头 (
$(), - 用转义字符匹配字符串,
- 匹配一些 (>= 1) 个空格,
- (可选,与 (5) 分组)匹配
=符号, - (可选,与(4)分组)匹配带有转义字符的字符串,
- 重复 (3) - (5)
- 匹配序列结尾(
))
但是,这个正则表达式只匹配"hello, world" 和font-size="15"。我怎样才能让它也匹配bold和italic,即匹配组([A-Za-z0-9-_]+(?:\="(?:[^"\\]|\\.)*")?)多次?
预期结果:['"hello, world"', 'bold', 'italic', 'font-size="15']
附:使用 JavaScript 原生正则表达式
【问题讨论】:
-
该字符串是独立的,还是您想在更大的文本中匹配它?
-
在一个较大的文本中,实际上是一个降价。使用
String.match函数匹配组,然后使用另一个函数处理每个案例。 -
你能提供更多你想要匹配/不匹配的例子吗?您编写的正则表达式看起来非常复杂,但本应是一项简单的任务。
-
@KubaWyrostek 不,我试过了,但没有用。
标签: javascript regex regex-greedy