不幸的是,尽管我已经多次尝试每年至少学习一次正则表达,但我总是忘记,因为我很少使用它们.今年我的新年决心是不再尝试再学习正则表达式 - 所以今年为了让我免于流泪,我会把它交给Stack Overflow.(去年圣诞节混音).
我想以这种格式传入一个字符串{getThis}
,并返回字符串getThis
.任何人都可以帮助我坚持新的一年的决议吗?
Stack Overflow的相关问题:
如何将常规引号(即',')转换为LaTeX/TeX引号(即`',``'')
正则表达式:在字符串中的两个标记之间拉出一个子字符串
正则表达式替换字符串中的所有\n,但不包括[code] [/ code]标记内的所有\n
Paul Dixon.. 241
尝试
/{(.*?)}/
这意味着,匹配{和}之间的任何字符,但不要贪婪 - 匹配以}结尾的最短字符串(?停止*贪婪).括号允许您提取匹配的部分.
另一种方式是
/{([^}]*)}/
这匹配除了} char之外的任何字符(另一种不贪婪的方式)
尝试
/{(.*?)}/
这意味着,匹配{和}之间的任何字符,但不要贪婪 - 匹配以}结尾的最短字符串(?停止*贪婪).括号允许您提取匹配的部分.
另一种方式是
/{([^}]*)}/
这匹配除了} char之外的任何字符(另一种不贪婪的方式)
/\{([^}]+)\}/ / - delimiter \{ - opening literal brace escaped because it is a special character used for quantifiers eg {2,3} ( - start capturing [^}] - character class consisting of ^ - not } - a closing brace (no escaping necessary because special characters in a character class are different) + - one or more of the character class ) - end capturing \} - the closing literal brace / - delimiter
如果你的字符串总是那种格式,那么正则表达式就是矫枉过正:
>>> var g='{getThis}'; >>> g.substring(1,g.length-1) "getThis"
试试这个:
/[^{\}]+(?=})/g
例如
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
将返回gskinner.com
,ssd.sd
.
这是一个使用javascript替换的简单解决方案
var st = '{getThis}'; st = st.replace(/\{|\}/gi,''); // "getThis"
正如上面接受的答案指出原始问题很容易用子串解决,但使用replace可以解决更复杂的用例
如果您有一个像"randomstring999 [fieldname]"这样的字符串,您可以使用稍微不同的模式来获取fieldname
var nameAttr = "randomstring999[fieldname]"; var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
这个在Textmate中工作,它匹配大括号之间的CSS文件中的所有内容.
\{(\s*?.*?)*?\}
selector {.
.
matches here
including white space.
.
.}
如果你想进一步能够返回内容,那么将它全部包装在一组括号中,如下所示:
\{((\s*?.*?)*?)\}
并且您可以通过$ 1访问内容.
这也适用于函数,但我没有使用嵌套的大括号进行测试.
你想使用正则表达式前瞻和后瞻.这将只给出花括号内的内容:
(?<=\{)(.*?)(?=\})
尝试这个
let path = "/{id}/{name}/{age}"; const paramsPattern = /[^{\}]+(?=})/g; let extractParams = path.match(paramsPattern); console.log("extractParams", extractParams) // prints all the names between {} = ["id", "name", "age"]