2015-11-07 57 views
2

下面是代碼:正則表達式匹配在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([email protected]_*) => { 
     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) 

從鉻結果:

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

Chrome的代碼打印字符串,但不能匹配正則表達式。 我做錯了什麼?

+2

我認爲這是因爲JS不支持'(?s)'修飾符。嘗試用'[\ s \ S]'替換所有'.'並重試。 –

+0

的確,解決了這個問題。 – qed

回答

2

由於JavaScript不支持單線修飾符(無論在線,也不是正規的),您需要更換每.字符類的外部與[\s\S](相反速記類字符類匹配任何符號可以有在一個字符串中)。

使用[\s\S],您可以匹配包括換行符的任何符號,而無需指定單行模式。

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