正则表达式模式匹配在 scala.js 中不起作用?
Regex pattern matching not working in scala.js?
代码如下:
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 中,代码打印子字符串,但无法匹配正则表达式。
我做错了什么吗?
由于JavaScript不支持单行修饰符(既不是内联修饰符,也不是常规修饰符),您需要将字符class外的每个.
替换为[\s\S]
(字符 class 与相反的 shorthand classes 匹配 any 符号可以在字符串中)。
使用 [\s\S]
,您将匹配包括换行符在内的任何符号,而无需指定单行模式。
val lastWordPattern = """([\s\S]*)\s+([\s\S]*)""".r
代码如下:
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 中,代码打印子字符串,但无法匹配正则表达式。 我做错了什么吗?
由于JavaScript不支持单行修饰符(既不是内联修饰符,也不是常规修饰符),您需要将字符class外的每个.
替换为[\s\S]
(字符 class 与相反的 shorthand classes 匹配 any 符号可以在字符串中)。
使用 [\s\S]
,您将匹配包括换行符在内的任何符号,而无需指定单行模式。
val lastWordPattern = """([\s\S]*)\s+([\s\S]*)""".r