0

我一直在尝试为字符串创建 RegEx 将近一天,但仍然没有成功,有人可以帮忙吗?

string example (double quotes are options, and can also be single quotes):
    "234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />"

and the following groups should be extracted:
    234
    <img src="http://abc.com/a.jpg" onclick="alert(""working with 'quotes'?"");" />

希望这很清楚,请任何人帮助!

4

2 回答 2

1

我不确定这个正则表达式的效率,但这里有一个与你的字符串匹配的。

规则

  1. 数字周围的引号是可选的,并且可以是单引号。
  2. html 周围的引号是可选的,可以是单引号。
  3. 问号后的空格可以是 0 或多个。

输入

"234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />"

正则表达式

^['"]?(?<number>\d+)['"]?\?\s*['"]?(?<html>\<.*\>)['"]?$

输出组

number: 234
html: <img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />
于 2012-04-19T15:14:57.880 回答
0

这是一个快速的解决方案(在 JavaScript 中):

var s = "\"234\"? \"<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />\"";
var matches = s.match(/['"][\d]*['"](?=[\s]*\?)|['"]<[^><]*>['"]/ig);

第一部分['"][\d]*['"](?=[\s]*\?)匹配引号内的数字,后跟可选空格和?。
第二部分['"]<[^><]*>['"]匹配引号和 <> 内的任何符号(<、> 除外)。

此解决方案的一个缺点是匹配的结果用引号括起来。
希望它可以帮助您实现所需的功能。

于 2012-04-19T14:56:08.970 回答