我正在尝试从javascript脚本中获取所有字符串,我创建了代码,但并没有捕获全部内容,而是跳过了一些代码

我的密码

String Strings;
    public String GetStrings(String str){
        try{
        String Str= str;
         Strings = "";
         while(true){
            Pattern pattern = Pattern.compile("('|\")");
            Matcher matcher = pattern.matcher(Str);
            if(matcher.find()){
                Pattern pattern1 = Pattern.compile("(" + matcher.group(1) + "[^" + matcher.group(1) + "]*" + matcher.group(1) + ")");
                Matcher matcher1 = pattern1.matcher(Str);
                if(matcher1.find()){
                    Strings += "|" + matcher1.group(1) + "|";
                    Str =  Str.replace(matcher1.group(1)," ");
                }
                }else{
                    break;
                    }
        }
        }catch(Exception err){return err.toString(); }
        return Strings;
        }



输入项

var A="&";var B="(";var D="[]";var X="'";var W='&';var Q='';var STR="'";var Q="'******'";var G="^";var F="...";var T='$';var wm = "()"
console.log(A + B + D + "^" + wm + '#');


输出量

|"&"||"("||"[]"||"'"||'&'||''||"'******'"||"^"||"..."||'$'||"()"||'#'|


如您所见,没有捕获到所有字符串,有些没有出现,如果任何人有任何解决方案或可以指出问题,请帮助我

最佳答案

您需要使用以下正则表达式:

(\"(.*?)\")|(\'(.*?)\')


例:

public String getStrings(String str){
   String regex = "(\\\"(.*?)\\\")|(\\'(.*?)\\')";

   Pattern pattern = Pattern.compile(regex);
   Matcher matcher = pattern.matcher(str);

   String output = "";
   while (matcher.find()){
       output = output+"|"+matcher.group(0)+"|";
   }

   return output;

}


输出:

|"&"||"("||"[]"||"'"||'&'||''||"'"||"'******'"||"^"||"..."||'$'||"()"||"^"||'#'|



Regex Explanation

08-27 15:36