【问题标题】:Regex pattern matching not working in scala.js?正则表达式模式匹配在 scala.js 中不起作用?
【发布时间】:2015-11-07 23:41:54
【问题描述】:

代码如下:

val s =
  """
    |\begin{bmatrix}
    |\cos \theta & -\sin \theta \\
    |\sin \theta & \cos \alpha
    |\end{bmatrix}
  """.stripMargin

val lastWordPattern = """(?s)(.*)\s+(.*)""".r
def wordToPos(string: String, position: Int): String = {
  val subString = string.substring(0, position)
  println("sub: ", subString)
  subString match {
    case lastWordPattern(x@_*) => {
      println(0, x(0))
      println(1, x(1))
      x(0)
    }
    case _ => ""
  }
}
wordToPos(s, 20)

来自sbt console的结果:

scala>     wordToPos(s, 20)
(sub: ,
\begin{bmatrix}
\co)
(0,
\begin{bmatrix})
(1,\co)

来自 chrome 的结果:

(sub: ,
\begin{bmatrix}
\co)

在 chrome 中,代码打印子字符串,但无法匹配正则表达式。 我做错了吗?

【问题讨论】:

  • 我认为是因为JS不支持(?s)修饰符。尝试将所有. 替换为[\s\S] 并重试。
  • 确实可以解决问题。

标签: regex scala scala.js


【解决方案1】:

由于 JavaScript 不支持单行修饰符(既不支持内联,也不支持常规修饰符),您需要将字符类之外的每个 . 替换为 [\s\S](具有与 any 匹配的相反速记类的字符类 符号可以在字符串中)。

使用[\s\S],您将匹配包括换行符在内的任何符号,而无需指定单行模式。

val lastWordPattern = """([\s\S]*)\s+([\s\S]*)""".r

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多