我有一個奇怪的用例。我需要確定給定的字串是否在雙花括號內包含“變數”;例如 {{date}}。下表代表了一些用例和我正在使用的正則運算式(?<!\{)\{\{(?:([^{}] ))}}(?!}),給了我想要的結果。
| 字串/變數 | 結果 |
|---|---|
文字{{date}}文字 |
真的 |
文字{date}}文字 |
錯誤的 |
文字{{date}文字 |
錯誤的 |
文字{date{date}}文字 |
錯誤的 |
文字{{date}date}文字 |
錯誤的 |
文字{{{date}}}文字 |
真的 |
文字{date{{date}}date}文字 |
真的 |
文字{{date}}一些文字{date}}文字 |
真的 |
但是,我遇到的問題是我需要將所有 JavaScript 函式都存盤在 XML 檔案中。
有點像這樣:
<script_node>
function foo(TextWithEmbeddedVars){
var check = /(?<!\{)\{\{(?:([^{}] ))}}(?!})/.test(TextWithEmbeddedVars);
return check;
}
</script_node>
因為該函式位于 XML 節點中,所以必須將小于 ("<") 和大于 (">") 符號寫為<or>以便不破壞 XML 檔案。但是當你這樣做時(?<!\{)\{\{(?:([^{}] ))}}(?!}),它會破壞正則運算式模式并且它停止作業。
有沒有一種方法可以重寫正則運算式以不需要小于符號或另一種方法來撰寫它并使其對 XML 友好?
謝謝,杰夫
uj5u.com熱心網友回復:
將函式字串包含在CDATA部分中應該可以解決問題,因為無需在 CDATA 部分中轉義保留的 XML 字符。這是執行此操作的推薦方法。
<script_node><![CDATA[
function foo(TextWithEmbeddedVars){
var check = /(?<!\{)\{\{(?:([^{}] ))}}(?!})/.test(TextWithEmbeddedVars);
return check;
}]]>
</script_node>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512776.html
