社区
JavaScript
帖子详情
求正则表达式
GDPudding
2006-09-23 09:33:18
第一次发帖
自己百思不得其解,所以上来求助了
一个示例字符串: aabbcc "ccccc" dddd qqqq eeee "wwwwee" "wwqwwqw" aaaasd 'asdsadw' poqwep "asdasdasd" asdsadasd
问题是用正则将字符串一个个地取出来,要求取出的不包含单双引号的内容
...全文
416
24
打赏
收藏
求正则表达式
第一次发帖 自己百思不得其解,所以上来求助了 一个示例字符串: aabbcc "ccccc" dddd qqqq eeee "wwwwee" "wwqwwqw" aaaasd 'asdsadw' poqwep "asdasdasd" asdsadasd 问题是用正则将字符串一个个地取出来,要求取出的不包含单双引号的内容
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GDPudding
2006-09-24
打赏
举报
回复
目前我已经想到了利用正则加递归的方法
一个正则的确是解决不了
因为我一直都想这样做,可是总是不成功,就因为预查功能不够强大
我的递归思路如下:
先用match取下引号内容(引号内容和非引号内容我都要作特殊处理),然后利用正则全局对象RegExp的leftContext和rightContext属性作参数递归下去,直至匹配不成功,再对剩下的内容(已经不存在引号)再作其他处理
最后目的就是将分开处理的字符按原来的排列顺序重新组合(所以我想到了用递归),一次处理的字符为单行,可不必太注意速度问题
希望有高手给出更好的解决方法
在此先谢过
随后给分
有头绪的请回帖说说
不管最后解决不解决,五天内结帖,当然,解决后立即结束
目前我能发的分貌似只有这么多,等级不够,也太久没上来了
chaircat
2006-09-24
打赏
举报
回复
貌似...一个正则搞定不了...因为还要不能重复...
zh__ua
2006-09-24
打赏
举报
回复
这个问题,关键是怎么判断间隔字符
你可以把对有引号的判断放前面,这样再次匹配时就是无引号的了
只要把分隔字符弄好了,应该就没问题了
GDPudding
2006-09-24
打赏
举报
回复
一个return 就直接匹配就行了,哈哈,;可以用;?
所有可能有可能无的都可以用?或*表示就行了,相信你已经找到解决办法了
-----------------------------------------------------------------
这个直接匹配显然是不现实的
这样会把"内的也匹配出来
另外一个问题就是那个
" return "
这样的话前面做的都没有效果了
呵呵
还是退回到递归的方法把引号全取出来单独对待才行
zh__ua
2006-09-24
打赏
举报
回复
一个return 就直接匹配就行了,哈哈,;可以用;?
所有可能有可能无的都可以用?或*表示就行了,相信你已经找到解决办法了
GDPudding
2006-09-24
打赏
举报
回复
总结问题
就是我个人对\b,\B理解不当,造成小问题变成自己的大问题
十分谢谢
zh__ua(刚来玩,请多指教)
也谢谢大家参与
结帖....
GDPudding
2006-09-24
打赏
举报
回复
有个别人问题我已经想到了
顺便也帮忙考虑下吧
如果是
return;
这句...
貌似,表达式还复杂着呢
嘿嘿
我自己加了[\s;]
可是如果一行只有一个
return
没其他就无能为力了...
而且处理前我是先用
/^[\s| ]*/g
把前头的空白去掉了
呵呵
应该是没什么办法了
效率啊...
zh__ua
2006-09-24
打赏
举报
回复
考虑效率的话,只能行首和尾单独判断一下,这个在我上面就说了,哈哈
GDPudding
2006-09-24
打赏
举报
回复
嗯
想到一块地方了
一旦用上了?
"就出来
可能我多加几个 | | 可以的吧
效率低点也只能是这样了
GDPudding
2006-09-24
打赏
举报
回复
\s\b(str)\b\s
在行首或者行末时会失效
如果是改成
\s?\b(str)\b\s?
那么该死的"又可以回来了...
问题就是这样的吧
难道我还得特意用 | 多写出行首和行末的匹配?
zh__ua
2006-09-24
打赏
举报
回复
这里有一个问题是,就是如果只有一个空格,并且后面的也没有引号的话,就匹配不了,可以自己处理匹配位置,也可以用(\s)?\b试试,但不知会不会有别的问题,自己试吧,我感觉这方法可行,关键是多想一下可能出现的情况,然后在程序中开始就处理了就行了
zh__ua
2006-09-24
打赏
举报
回复
那就按我上面说的那种做吧,不知你理解我上面说的想法了没
GDPudding
2006-09-24
打赏
举报
回复
我试过
\b可以匹配上"
\s\b倒没试过
先作个小试验...
广告时间
很快回来....
GDPudding
2006-09-24
打赏
举报
回复
晕,把你最初需求说出来好吧
---------------------------------------------------------------
我就是在自己做一个基于Js的DOM操作语法高亮插件时遇上了上面的问题
比如我本想把关键字var改成<span id="keyword">var</span>
却顺便也把 "var" 改成了<span id="string">"<span id="keyword">var</span>"</span>
这样说明白么?
zh__ua
2006-09-24
打赏
举报
回复
如果你只是以空格分隔,然后加自己的格式字符,可以用下面的思路,程序你自己写吧
对非引号分隔字符用 \s\b和\b\s 判断单词是否结束,开头,结尾单独判断或用^$判断
对用引号的用\"\b和\b\"判断,
直接替换就行了,顺序肯定一样
GDPudding
2006-09-24
打赏
举报
回复
比如说这样一个字符串
var str = "aabbcc \"ccccc\" dddd qqqq eeee \"wwwwee\" \"wwqwwqw\" aaaasd 'asdsadw' poqwep \"asdasdasd\" asdsadasd \"aaa\" aaa";
楼主到底想得到什么?
是a = ["aabbcc","dddd","qqqq", ... "aaa"]
b = ["ccccc","wwwwee","wwqwwqw","aaa"]这两个Array,可以这样理解吗?
如果str中出现两个aaa或者两个"aaa"怎样处理?
=---------------------------------------------=
如果是单纯得到这两个Array那就不好复原顺序了...
关于数组当时我还想过多维,然后其中一维记录排位(RegExp的index属性),再用Array的sort排一排
貌似原理上可以实现,但是效果还是不好吧...
目前最想是有达人写出提取或者是替换(或者叫插入吧)的一个(最好不过,只是不现实了)或者多个正则式
谢谢大家关注
GDPudding
2006-09-24
打赏
举报
回复
此问题好解决啊,用java的话用str.split("(\"|'|\\s+)+");
用javascript的话用str.split(/("|'|\s+)+/);
得到的结果都是String的数组,然后挨个取就行了
--------------------------------------------------------------
如果是这种办法的话效率的确不高
处理一组字符串还可以
谢谢意见....
zh__ua
2006-09-24
打赏
举报
回复
晕,把你最初需求说出来好吧
GDPudding
2006-09-24
打赏
举报
回复
再强调一下下
取出来的(或者是替换后),除加插的字符,顺序要和原来一样
而不只是单单取出
GDPudding
2006-09-24
打赏
举报
回复
应该说是想得到引号内和引号外的分开处理,重复无所谓
因为我只是对其分开处理
最后重新按原来顺序组合成处理过后的字符串
比如
var str = "aabbcc \"ccccc\" dddd qqqq eeee \"wwwwee\" \"wwqwwqw\" aaaasd 'asdsadw' poqwep \"asdasdasd\" asdsadasd \"aaa\" aaa";
我想处理后会变成这样
alert(str_rebuild)
->
[A]aabbcc[/A] [B]"ccccc"[/B] [A]dddd[/A] [A]qqqq[/A] [A]eeee[/A] [B]"wwwwee"[/B] [B]"wwqwwqw"[/B] [A]aaaasd[/A] [B]'asdsadw'[/B] [A]poqwep[/A] [B]"asdasdasd"[/B] [A]asdsadasd[/A] [B]"aaa"[/B] [A]aaa[/A]
以上是输出结果
我知道直接用replace不好弄,可能会出现
aaa "aaa"
被改成
[A]aaa[/A] [B]"[A]aaa[/A]"[/B]
或者
[A]aaa[/A] "[A]aaa[/A]"
的形式
再说明一点
比如
aaa bbbb cccc
这些只是关键字,均由变量输入,组成特定的正则表达式
直白地说,我想做一个语法高亮的东东,还有就是自动判断缩进(缩进由程序输出,当然像Python这种完全靠缩进解释执行的语言是不加自动的了)
加载更多回复(4)
正则表达式
30分钟入门教程doc
正则表达式
30分钟入门教程
精通
正则表达式
正则表达式
各语言通用,这本书是经典中的经典
带你学会使用
正则表达式
内容简介:
正则表达式
,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。计算机科学的一个概念。
正则表达式
使用单个字符串来描述、匹配一系列符合某个句法规则的字符串...
Python
正则表达式
(一看就懂)
目前越来越多的网站、编辑器、编程语言都已支持一种叫“
正则表达式
”的字符串查找“公式”,有过编程经验的同学都应该了解
正则表达式
(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式...
Linux基础之
正则表达式
正则表达式
:又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
正则表达式
通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式
是对字符串...
JavaScript
87,902
社区成员
224,615
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章