我正在尝试为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代码段与该正则表达式匹配。
答案 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>$";
'%s',
之后添加了缺少的空格{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.
这就是为什么此正则表达式给您一个错误。