簡體   English   中英

如何不匹配JavaScript中的某個正則表達式?

[英]How not to match a certain regexp in javascript?

我想檢查一個變量是否與此正則表達式不匹配:

DEMO

因此,這是與我的代碼中的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容易地同時測試若干行。 如果僅測試一個,則同時刪除gm ,否則可能會錯誤地告訴您一個未通過的字符串通過或失敗,從而導致錯誤。

演示: JSFiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM