javascript - Java中基于动态正则表达式的字符串替换

标签 javascript java regex string unicode

受到此启发regex-based answera unicode question我现在有以下 JavaScript 代码, 它对字符串中出现的 unicode 编码字符进行转义。

var testString = "\\u53ef\\u4ee5NonUnicode\\u544a\\u8bc9\\u6211";
print(testString)

String.prototype.unescape = function() {
        return this.replace(/\\u([0-9a-f]{4})/g, 
                function (whole, group1) {
                    return String.fromCharCode(parseInt(group1, 16));
                }
            );
    };

print(testString.unescape()) // outputs: 可以NonUnicode告诉我

我在Java(1.7)中找不到一种方法来进行这种动态正则表达式替换,只有像java.lang.String.replaceAll这样的静态方法或java.util.regex.Matcher.group ,它返回组,但无法设置它。

这在 Java 中可能吗?有什么解决办法吗?

最佳答案

使用 Matcher.appendReplacement() 非常简单和 Matcher.appendTrail() :

// Compile the pattern
Pattern p = Pattern.compile("\\\\u([0-9a-f]{4})");
// Create a matcher for our input
Matcher m = p.matcher(testString);
// Create a buffer to hold the resulting string
StringBuffer result = new StringBuffer();
// Iterate over matches
while(m.find()) {
  // Convert to UTF8 characters
  int codePoint = Integer.parseInt(m.group(1), 16);
  char[] chars = Character.toChars(codePoint);
  // Append to buffer
  m.appendReplacement(result, new String(chars));
}
// Append rest of string
m.appendTail(result);
// Display result
System.out.println(result);

你可以测试一下here .

关于javascript - Java中基于动态正则表达式的字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562425/

相关文章:

javascript - 未定义类时如何从 ajax 响应中获取 anchor 标记值

java - freemarker 模板语法 spring boot

java - 提供程序 com.levigo.jbig2.util.log.JDKLoggerBridge 不是子类型

python - 正则表达式实现细节

javascript - 当我在 Javascript 中输入第二个模块时,我得到了错误的结果

javascript - Node MySQL : Return a value from a column

java - 如何使用java追加到xml表?

以下语言的正则表达式

java - 解析引号之间不带两个引号的文本

javascript - 终极版/传奇 : Approach for larger API's