各位大神 求助用正则表达式抽取jsp页面的中文

懒得搭理你 2013-11-06 11:26:23
项目正在进行国际化工作,目前需要将页面中的中文提取出来(注释除外)供翻译人员进行翻译。
我尝试了用正则表达式去抽取中文,但是目前遇到了如下几个问题:
1、注释中的中文不好匹配,在jsp页面中有如下的注释情况: <% %> // /****/ <!-- -->(因为在jsp页面中可嵌入java代码、js代码、还有自身的html代码)
2、在jsp页面一行的文本中如果有类似的信息: "客户档案accountName,输入的文本超过最大长度200" ,则处理结果应该为:客户档案accountName,输入的文本超过最大长度200;而:
if (pos > -1) {
if (arg.split(".")[1].length>decimal_length) {
errorMsg = title+"小数点后最多可输入"+decimal_length+"个数字";
alert(errorMsg);
return false;
}
}

处理的结果则是提取出两个中文字段:小数点后最多可输入 和 个数字。
试了快一天了,没试出来

任何给出意见的,将不甚感激!
...全文
539 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssdd273381952 2014-01-14
  • 打赏
  • 举报
回复
技术上面有人给出了方案,我就提点疑问: 1、为什么要把注释中的中文过滤掉?可以一起提取出来啊。 2、为什么要进行截断?截断之后进行翻译就有可能语义不是很准。
左轩 2013-11-15
  • 打赏
  • 举报
回复
设计思路:将Jsp多次过滤,最终达到你所需要的东西。 1、过滤掉注释,大多注释是以 // <!----> /*...*/ 把这些注释替换成空字符串 2、过滤掉java代码 <%.....%> 3、过滤掉html代码... 4、JS过滤起来应该有点复杂 5、可以考虑Java的httpClient模式发送报文然后调用java的处理类,对各个依次处理,最后返回报文。
W-Aires 2013-11-11
  • 打赏
  • 举报
回复

var Filter = {
                    doFilter: function(str){
                        if(!str || typeof str !== 'string')return str;
                        for(var i = 0, len = this._filters.length; i < len; i++){
                            str = str.replace(this._filters[i], "");
                        }
                        return str;
                    },
                    _filters: [//private
                        /\/\*(?:.|\n)*?\*\//g,
                        /\/\/.*/g,
                        /<\!--(?:.|\n)*?-->/g
                    ]
                },
       getter = /['"](?:.|\n)*?[^\x00-\xff](?:.|\n)*?['"]/g;

        var testStr = "//测试\n" +
                "var x = 1;\n" +
                "/**\n" +
                "中文\n" +
                "*/\n" +
                "<!--<span>测试中文</span>\n-->\n" +
                "var y = '中文变量';\n" +
                "var z = '变量加' + x + y\n";

        testStr = Filter.doFilter(testStr);
        var zhStr = testStr.match(getter);
        for(var i = 0; i < zhStr.length; i++){
            console.log(zhStr[i])
        }
js版的,要用java版的改下就可以了吧,java的点包含换行 不过感觉这样提取出来的翻译不一定准确,没有语境了
懒得搭理你 2013-11-11
  • 打赏
  • 举报
回复
<script type="text/javascript">alert('看来我还是手动吧');</script>
懒得搭理你 2013-11-11
  • 打赏
  • 举报
回复
<script type="text/javascript">alert('看来我还是手动吧'?=><&%);</script>
懒得搭理你 2013-11-06
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
2、在jsp页面一行的文本中如果有类似的信息: "客户档案accountName,输入的文本超过最大长度200" ,则处理结果应该为:客户档案accountName,输入的文本超过最大长度200;而: 我怎么没明白啊。这个处理结果不变吗?
因为这个是作为直接的一句话,里面的accountName不是一个变量。而下面的title decimal_length是一个变量
teemai 2013-11-06
  • 打赏
  • 举报
回复
2、在jsp页面一行的文本中如果有类似的信息: "客户档案accountName,输入的文本超过最大长度200" ,则处理结果应该为:客户档案accountName,输入的文本超过最大长度200;而: 我怎么没明白啊。这个处理结果不变吗?
tony4geek 2013-11-06
  • 打赏
  • 举报
回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧