js正则表达式语法
<HTML><HEAD><SCRIPTLANGUAGE="JavaScript"><!--varreg1=/\w+(?<!(?:dual))\b/g;alert("fro...
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
var reg1=/\w+(?<!(?:dual))\b/g;
alert("from tab1".match(reg1));
alert("from dual".match(reg1));
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
如上,在match tracer工具下都可以正常匹配,为什么js下就报错呢 展开
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
var reg1=/\w+(?<!(?:dual))\b/g;
alert("from tab1".match(reg1));
alert("from dual".match(reg1));
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
如上,在match tracer工具下都可以正常匹配,为什么js下就报错呢 展开
2个回答
展开全部
g是global,全局的意思,比如有一规则是否找到一个就结束,还是要找到所有匹配。
p已经是一个正则式了,可以这样定义:p=/^\d+$/g;然后直接p.test(a);
因为p已经是正则式,所以new RegExp(),不能重复定义是否全局,否则会与p本身定义有冲突。如果new RegExp()带的参数是个字符串, p ='^\\d+$';则可以加‘g’参数。
p已经是一个正则式了,可以这样定义:p=/^\d+$/g;然后直接p.test(a);
因为p已经是正则式,所以new RegExp(),不能重复定义是否全局,否则会与p本身定义有冲突。如果new RegExp()带的参数是个字符串, p ='^\\d+$';则可以加‘g’参数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
js不支持负向零宽断言
(?<exp)和(?<!exp)都是不支持的
也许你可以改成这样
\b(\w{1,3}|\w*(?!(?:dual))\w{4})\b
另:你的正则表达式连qwerdual也是不能匹配的
如果你只是想排除单词dual的话(?!dual)\b\w+\b就可以了
看不懂你为什么要在(?<!)加一个(?:),零宽断言本来就不会捕获结果,额外加一个没有任何效果
(?<exp)和(?<!exp)都是不支持的
也许你可以改成这样
\b(\w{1,3}|\w*(?!(?:dual))\w{4})\b
另:你的正则表达式连qwerdual也是不能匹配的
如果你只是想排除单词dual的话(?!dual)\b\w+\b就可以了
看不懂你为什么要在(?<!)加一个(?:),零宽断言本来就不会捕获结果,额外加一个没有任何效果
更多追问追答
追问
那有什么其他正则可以替代不,目的是匹配到from 表名,排除掉oralce里面的dual
追答
你具体是想在什么内容里匹配什么内容呢?
按照/\w+(?<!(?:dual))\b/g,你只能匹配到所有不以dual结尾的单词
\w不包含空格,只能匹配单个单词,from也会被匹配进去,并不是像你上面所说的只匹配表名啊。
from\s+(?!dual)(\w+)\b
我猜也许你需要的是上面的正则
例如:
select * from student where name = 'a'
select * from teacher where name = 'a'
select * from dual where id = 0
该正则可以匹配出
from student
from teacher
两组内容
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询