[英]jQuery issue when .find() term in variable with more than one match
[英]Why find between brackets is matching wrong when I have more than one match?
我試圖找到兩個括號之間的文本並將它們放入數組中。
為此,我使用此正則表達式: /\{\{([^)]+)\}\}/
。 (它匹配兩個括號之間的文本)。
但是當我有不止一場比賽時,比賽就錯了。
為什么? 這是因為正則表達式不正確,還是我需要使用一些正則表達式標志?
我期待得到foo
和bar
的數組。
const a = 'text:{{ foo }} {{bar}}'; const b = a.match(/\{\{([^)]+)\}\}/); console.log(b);
我的最終目標是將此文本: text:{{ foo }} {{bar}}
轉換為'text:' + foo + bar
。 這意味着我想去掉括號並將不是括號的內容用引號括起來,並用加號聯系他們。
為此,我想找到foo
和bar
,然后將文本與結果分開並與他們聯系。
我曾經不得不做一個任務,要求我使用像你這樣的正則表達式來查找和替換括號之間的文本,我寫了一個單行函數來這樣做,我將它作為答案發布以供將來參考
/**
* @param str - The string to parse
* @param conf - The object to get "variables" from (eg: { name: 'John' } would be the object if the string was 'Hello {{name}}')
*/
const parse = (str, conf) => str.replace(/{{(?<sc>[a-z]+)}}/g, (substr, match) => conf[match] ?? substr);
在您的情況下,您可以使用類似的東西:
const a = 'text:{{ foo }} {{bar}}'
const b = a.match(/(?<=\{\{\s*)\w+(?=\s*\}\})/g)
console.log(b) // output: ['foo', 'bar']
解釋:
(?<=\{\{\s*)
:這是一個積極的后視,它斷言匹配之前是括號之間的正則表達式,在這種情況下我尋找{{
后跟 0 個或更多空格\w+
:匹配任何單詞字符( foo
, bar
)(?=\s*\}\})
:這與第一組相同,但它斷言匹配后面是括號之間的匹配,在這種情況下,我尋找 0 個或更多空格,然后}}
g
:是全局修飾符,我添加它是因為我想匹配這個正則表達式的所有出現並且在第一次匹配后不停止
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.