正则表达式错误:此正则表达式有什么问题?

时间:2018-12-28 00:28:22

标签: java regex

我正在尝试为Java程序编写一个正则表达式,使其与所有JS代码片段匹配,如下所示:

<script> window.box||((box=function(){box.q.push(arguments);}).q=[]); box('ns:foo','event', 'bar', {delimiter:'null',display_name:'baz',id:'12345',name:'attr_1',value:'attr_val',event_type:'abc'}); </script>

这是我到目前为止所拥有的:

private final static String SCRIPT_CODE_REG_EXP = "(^<script>\\n.*\\n box(\\('ns:.*','event', '%s',)(\\{%s\\}){1}\\)(;\\n</script>$)";

JSON值{delimiter:'null',display_name:'baz',id:'12345',name:'attr_1',value:'attr_val',event_type:'abc'}将作为String.format()。

我无法将JS代码段与该正则表达式匹配。

2 个答案:

答案 0 :(得分:1)

尝试此正则表达式:

^<script>\n.*\n  box\('ns:.*','event', '%s', \{%s\}\);\n</script>$

Java:

String patternString = "^<script>\\n.*\\n  box\\('ns:.*','event', '%s', \\{%s\\}\\);\\n</script>$";

更改

  1. 已删除不需要的括号或错误放置的括号
  2. '%s',之后添加了缺少的空格
  3. 已删除不需要的量词{1}

您的问题尚不清楚,但是由于有两个格式说明符,因此请确保将两个对象传递给格式。

在将值插入模式之前,请确保先quote个值。


您可以使用regex101之类的工具来测试正则表达式模式,但是它不支持Java正则表达式,因此某些功能可能不可用或仅以其他形式提供。

答案 1 :(得分:0)

如果您查看此正则表达式,Java会将其解释为:

(^<script>\n.*\n  box(\('ns:.*','event', '%s',)(\{%s\}){1}\)(;\n</script>$)
^... The opening parenthesis is without a corresponding closing parenthesis.

这就是为什么此正则表达式给您一个错误。