2017-10-10 66 views
0

您好,我需要匹配字符串中的數學模塊。數學模塊以$$開始,以$$結束。可以有任意數量的數學塊。定期預期匹配數學模塊

例如輸入可以關注一下:

abcd... asdfasdf 
$$ 
math expression 
$$ 
<another set of random words> 
$$ 
expression 
$$ 
... 

什麼是正確的正則表達式只匹配的數學表達式?

謝謝。

+0

喜歡[此](https://regex101.com/r/sNmGqD/1)? – Gurman

+0

@Gurman這可能是一個問題,在$ $$中找到一個'$'。 –

+0

@TomFenech你是對的。我只是假定表達式塊中不會有'$'。 – Gurman

回答

0

我不知道什麼是打字稿,但是我查了一下它就像是javascript。你爲什麼不使用新的RegExp()? 像新的RegExp(/^\$\$.+\$\$$/ g).exec(你的str) Char。+會檢測任何字符等等,直到它在最後找到$爲止。你可以進入你的具體病情此匹配

0

假設每一奇數$$開始一個數學模式塊,每個偶數一個結束前一個塊,你可以只劈在$$串並採取奇數組的元素:

> str=`abcd... asdfasdf 
$$ 
math expression 
$$ 
<another set of random words> 
$$ 
expression 
$$` 
> str.split("$$").filter((s, index) => index % 2 === 1) 
Array [ " math expression ", " expression " ] 

陣列仍包含了前端和後端的空間 - 你可以用String.trim擺脫他們的。

+0

我認爲分割對我來說是最合適的選擇。謝謝。 – Prasad

1

你可以嘗試/\$\$((?:\$[^\$]|[^\$])+)\$\$/g,這將匹配$$和$$之間的任何內容,包括單個$。

實施例: http://regexr.com/3gu75

let text = document.body.innerHTML; 
 

 
let regex = /\$\$((?:\$[^\$]|[^\$])+)\$\$/g, 
 
    match; 
 

 
while((match = regex.exec(text)) != null) { 
 
    console.log(match[1].trim()); 
 
}
abcd... asdfasdf 
 
$$ 
 
math expression 
 
$$ 
 
another set of random words 
 
$$ 
 
expression 
 
$$ 
 

 
$$ 
 
expression with a $ symbol 
 
$$