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下就报错呢
展开
 我来答
风音2233
2014-08-29 · 超过63用户采纳过TA的回答
知道答主
回答量:137
采纳率:100%
帮助的人:54.6万
展开全部
g是global,全局的意思,比如有一规则是否找到一个就结束,还是要找到所有匹配。
p已经是一个正则式了,可以这样定义:p=/^\d+$/g;然后直接p.test(a);
因为p已经是正则式,所以new RegExp(),不能重复定义是否全局,否则会与p本身定义有冲突。如果new RegExp()带的参数是个字符串, p ='^\\d+$';则可以加‘g’参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绯弹亚丝娜
2014-08-29 · TA获得超过1094个赞
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:135万
展开全部
js不支持负向零宽断言
(?<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
两组内容
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式