[英]How not to match a certain regexp in javascript?
我想檢查一個變量是否與此正則表達式不匹配:
因此,這是與我的代碼中的regexp匹配的模式:
rxAfterPrint = new RegExp(/^ *\+ *("(?:[^"]*)"|(?:[a-zA-Z]\w*)) *(.*)$/);
並以此方式檢查是否匹配:
var t2 = t[2].match(rxAfterPrint);
現在我想創建與該模式不匹配的e t3
我怎樣才能做到這一點? 你能幫我么?
(承認我有一個不公平的優勢,因為我知道為什么會出現此問題: 如何使用JavaScript / jQuery解釋textarea中的字符串? )
所以我的猜測是,您希望將String串聯實現為打印語句的一部分,如下所示:
<string> ::= '"' <character>* '"' | <variable>
<print> ::= 'print' <string> ('+' <string>)*
<print> ::= 'print' (<string> '+')* <string>
這兩個<print>
實際上表示相同,使用第二個版本,您可以首先(匹配/^ *print */
)嘗試將模式rxConcat
盡可能多地應用,如果不匹配,則應用第二個表達式rxStringValEOL
匹配其余部分(如果不成功,則為無效語句):
rxConcat = new RegExp(/ *(?:"([^"]*)"|([a-zA-Z]\w*)) *\+ */);
rxStringValEOL = new RegExp(/ *(?:"([^"]*)"|([a-zA-Z]\w*)) *$/);
這也表明,設計一種對程序員和編寫編譯器都很容易的語言是非常困難的。
您現在還不清楚"I want to create a variable that don't match this pattern"
是什么意思。 由於t2是您的匹配項,因此您似乎希望t3是不匹配的對象。
因為您錨定在字符串( ^
)的開頭,所以這是在幾乎相同的正則表達式中使用否定前瞻的好地方。 從字面上看,我所做的只是在結尾加上(?!
和)
和.*
。
output1.value = input.value.match(/^(?! *\+ *("(?:[^"]*)"|(?:[a-zA-Z]\w*)) *(.*)).*$/gm).join("\r\n")
一種替代方法是像這樣使用replace()
,但我相信match()
是更好的選擇。
output2.value = input.value.replace(/(^ *\+ *("(?:[^"]*)"|(?:[a-zA-Z]\w*)) *(.*)$\s*)+/gm,"")
對於這兩種情況,我增加了g
葉形和m
ultiline容易地同時測試若干行。 如果僅測試一個,則同時刪除g
和m
,否則可能會錯誤地告訴您一個未通過的字符串通過或失敗,從而導致錯誤。
演示: JSFiddle
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.