【问题标题】:RegEx test from JavaScript to Java从 JavaScript 到 Java 的 RegEx 测试
【发布时间】:2016-04-22 06:06:57
【问题描述】:

我正在尝试将以下算法从 Angular 服务迁移到后端,从而从 JavaScript 迁移到 Java。

您能帮我在 Java 中获得与在 js 中相同的结果吗?

var UA                  = navigator.userAgent,
    isIOS               = /ip(hone|od|ad)/i.test(UA),
    isSafari            = /(mac os x).*version\/\d(.\d)+ (mobile\/\w{5,} )?safari/i.test(UA),
    isSafari5           = /(mac os x).*version\/5[.\d]+ (mobile\/\w{5} )?safari/i.test(UA),
    isAndroid           = /android/i.test(UA),
    isAndroidBrowser    = isAndroid && !/chrome|firefox/i.test(UA),
    isAndroidBrowserOld = isAndroidBrowser && parseFloat(/android ([\d\.]+)/i.exec(UA).pop()) < 4.3,
    isAndroid2          = isAndroidBrowser && /android 2\.\d/i.test(UA),
    isAndroidChrome     = isAndroid && /chrome/i.test(UA),
    isKindleFire        = /KF[A-Z]{2,3}/.test(UA),
    isFirefox           = /firefox/i.test(UA),
    isIE11              = /Trident/i.test(UA),
    isIE                = /msie \d/i.test(UA) || isIE11,
    isMSTouch           = (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0),
    isMSTouchPrefix     = !!navigator.msMaxTouchPoints,
    isPhone             = ((/mobile/i.test(UA) && !/ipad|tablet/i.test(UA)) || matchMedia('only screen and (max-device-width : 767px)').matches) && !isKindleFire,
    isTablet            = (isAndroid && !isPhone) || (isIOS && !isPhone) || isKindleFire,
    isMobile            = isPhone || isTablet;

    this.isPhone = isPhone;
    this.isTablet = isTablet;

提前感谢您的帮助

【问题讨论】:

  • 使用一些在线工具..如果你理解正则表达式,你翻译它就不会有任何问题
  • 我想你知道怎么做,你只是懒得自己做..

标签: javascript java regex


【解决方案1】:

一般

  • 正则表达式可以通过 java.util.regex.Pattern 使用,Java 没有像 JavaScript 这样的语言级别支持
  • 删除正则表达式周围的 //,这是 JavaScript 正则表达式集成的一部分
  • 任何 \ 都需要在 Java 字符串中转义为 \\
  • /i insensitive 等价于 Pattern.compile(regex, Pattern.CASE_INSENSITIVE)
  • 核心正则表达式在 99% 的情况下应该相同

例子

String UA = "iphone";

boolean isIOS = 
        Pattern.compile("ip(hone|od|ad)", Pattern.CASE_INSENSITIVE).matcher(UA).matches();
boolean isSafari5 = 
        Pattern.compile("(mac os x).*version\\/\\d(.\\d)+ (mobile\\/\\w{5,} )?safari", Pattern.CASE_INSENSITIVE).matcher(UA).matches();

System.out.println(isIOS);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多