补充一下如果出现 aaa 和 "aaa"只能取出 aaa 不能取出"aaa" 里的 aaa

解决方案 »

  1.   

    目前我已经想到了利用正则加递归的方法一个正则的确是解决不了因为我一直都想这样做,可是总是不成功,就因为预查功能不够强大我的递归思路如下:先用match取下引号内容(引号内容和非引号内容我都要作特殊处理),然后利用正则全局对象RegExp的leftContext和rightContext属性作参数递归下去,直至匹配不成功,再对剩下的内容(已经不存在引号)再作其他处理最后目的就是将分开处理的字符按原来的排列顺序重新组合(所以我想到了用递归),一次处理的字符为单行,可不必太注意速度问题希望有高手给出更好的解决方法在此先谢过随后给分有头绪的请回帖说说不管最后解决不解决,五天内结帖,当然,解决后立即结束目前我能发的分貌似只有这么多,等级不够,也太久没上来了
      

  2.   

    比如说这样一个字符串
    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"怎样处理?
      

  3.   

    此问题好解决啊,用java的话用str.split("(\"|'|\\s+)+");
    用javascript的话用str.split(/("|'|\s+)+/);
    得到的结果都是String的数组,然后挨个取就行了
      

  4.   

    应该说是想得到引号内和引号外的分开处理,重复无所谓因为我只是对其分开处理最后重新按原来顺序组合成处理过后的字符串比如var str = "aabbcc \"ccccc\" dddd qqqq eeee \"wwwwee\" \"wwqwwqw\" aaaasd 'asdsadw' poqwep \"asdasdasd\" asdsadasd \"aaa\" aaa";
    我想处理后会变成这样
    alert(str_rebuild)->[A]aabbcc[/A] "ccccc" [A]dddd[/A] [A]qqqq[/A] [A]eeee[/A] "wwwwee" "wwqwwqw" [A]aaaasd[/A] 'asdsadw' [A]poqwep[/A] "asdasdasd" [A]asdsadasd[/A] "aaa" [A]aaa[/A]以上是输出结果我知道直接用replace不好弄,可能会出现
    aaa "aaa"
    被改成
    [A]aaa[/A] "[A]aaa[/A]"
    或者
    [A]aaa[/A] "[A]aaa[/A]"
    的形式再说明一点比如aaa bbbb cccc这些只是关键字,均由变量输入,组成特定的正则表达式
    直白地说,我想做一个语法高亮的东东,还有就是自动判断缩进(缩进由程序输出,当然像Python这种完全靠缩进解释执行的语言是不加自动的了)
      

  5.   

    此问题好解决啊,用java的话用str.split("(\"|'|\\s+)+");
    用javascript的话用str.split(/("|'|\s+)+/);
    得到的结果都是String的数组,然后挨个取就行了--------------------------------------------------------------如果是这种办法的话效率的确不高处理一组字符串还可以谢谢意见....
      

  6.   

    比如说这样一个字符串
    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排一排貌似原理上可以实现,但是效果还是不好吧...目前最想是有达人写出提取或者是替换(或者叫插入吧)的一个(最好不过,只是不现实了)或者多个正则式谢谢大家关注
      

  7.   

    如果你只是以空格分隔,然后加自己的格式字符,可以用下面的思路,程序你自己写吧
    对非引号分隔字符用 \s\b和\b\s 判断单词是否结束,开头,结尾单独判断或用^$判断
    对用引号的用\"\b和\b\"判断,
    直接替换就行了,顺序肯定一样
      

  8.   

    晕,把你最初需求说出来好吧
    ---------------------------------------------------------------我就是在自己做一个基于Js的DOM操作语法高亮插件时遇上了上面的问题比如我本想把关键字var改成<span id="keyword">var</span>却顺便也把 "var" 改成了<span id="string">"<span id="keyword">var</span>"</span>这样说明白么?
      

  9.   

    我试过\b可以匹配上"\s\b倒没试过先作个小试验...广告时间很快回来....
      

  10.   

    \s\b(str)\b\s在行首或者行末时会失效如果是改成\s?\b(str)\b\s?那么该死的"又可以回来了...问题就是这样的吧难道我还得特意用 | 多写出行首和行末的匹配?
      

  11.   

    有个别人问题我已经想到了顺便也帮忙考虑下吧如果是return;这句...貌似,表达式还复杂着呢嘿嘿我自己加了[\s;]可是如果一行只有一个return没其他就无能为力了...而且处理前我是先用/^[\s| ]*/g把前头的空白去掉了呵呵应该是没什么办法了效率啊...
      

  12.   

    总结问题就是我个人对\b,\B理解不当,造成小问题变成自己的大问题十分谢谢zh__ua(刚来玩,请多指教)也谢谢大家参与结帖....
      

  13.   

    一个return 就直接匹配就行了,哈哈,;可以用;?
    所有可能有可能无的都可以用?或*表示就行了,相信你已经找到解决办法了
      

  14.   

    一个return 就直接匹配就行了,哈哈,;可以用;?
    所有可能有可能无的都可以用?或*表示就行了,相信你已经找到解决办法了
    -----------------------------------------------------------------这个直接匹配显然是不现实的这样会把"内的也匹配出来另外一个问题就是那个"    return    "这样的话前面做的都没有效果了呵呵还是退回到递归的方法把引号全取出来单独对待才行