正则表达式捕获字符串,包括;(分号)

时间:2019-04-25 06:24:28

标签: javascript regex

我需要从HTML中的javascript代码获取分配变量的名称和值。

例如,有html代码:

<html>
<head>~~</head>
<body>
  <div>contents</div>
  <script>
var value1 = 55;var value2= 27;
var value3 = 'T';var value4 = "FIT#$%SIZE";
var value5 = '{\"P00000WJ000E\":{\"stock_price\":\"0.00\",\"use_stock\":true,\"use_soldout\":\"T\",\"is_display\":\"T\",\"is_selling\":\"T\",\"option_price\":79000,\"option_name\":\"FIT#$%SIZE\",\"option_value\":\"NOBLE-44\",\"stock_number\":26,\"option_value_orginal\":[\"NOBLE\",\"44\"],\"use_stock_original\":\"T\",\"use_soldout_original\":\"T\",\"use_soldout_today_delivery\":\"F\",\"is_auto_soldout\":\"F\",\"is_mandatory\":\"T\",\"option_id\":\"000E\",\"is_reserve_stat\":\"N\",\"item_image_file\":null,\"origin_option_added_price\":\"0.00\"}}';
var value6 = '1';
var value7 = 'string;must-catch';
var value8 = 8;
var value9 = 'S';
var value10 = 'T';
  </script>
</body>
</html>

预期的事情是:

result = {
  value1: 55,
  value2: 27,
  value3: 'T',
  value4: "FIT#$%SIZE",
  ...
}

在我的环境中,没有Regex不能使用其他解析器工具。 因此,尝试几乎涵盖以下内容:

var\s(\w+)\s?\=\s?(\d+|\"[^;]*\"|\'[^;]*\')\s?\;

enter image description here

结果已经出现,但我还需要捕获包含分号的字符串。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

代替使用$name = "zzz" $name -cmatch "^[0-9a-z]*$" 不匹配分号,您可以匹配[^;]*而不是换行符,并为其添加单引号或双引号[^\n']

[^\n"]

如果您想匹配换行符,则可以像var\s(\w+)\s?\=\s?(\d+|\"[^\n"]*\"|\'[^\n']*\')\s?\; ^^^ ^^^ [^"]*一样从negated character class省略换行符。

Regex demo