Chr*_*mbo 105 javascript regex
不幸的是,尽管我已经多次尝试每年至少学习一次正则表达,但我总是忘记,因为我很少使用它们.今年我的新年决心是不再尝试再学习正则表达式 - 所以今年为了让我免于流泪,我会把它交给Stack Overflow.(去年圣诞节混音).
我想以这种格式传入一个字符串{getThis},并返回字符串getThis.任何人都可以帮助我坚持新的一年的决议吗?
Stack Overflow的相关问题:
Pau*_*xon 241
尝试
/{(.*?)}/
Run Code Online (Sandbox Code Playgroud)
这意味着,匹配{和}之间的任何字符,但不要贪婪 - 匹配以}结尾的最短字符串(?停止*贪婪).括号允许您提取匹配的部分.
另一种方式是
/{([^}]*)}/
Run Code Online (Sandbox Code Playgroud)
这匹配除了} char之外的任何字符(另一种不贪婪的方式)
meo*_*ouw 146
/\{([^}]+)\}/
/ - 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
Run Code Online (Sandbox Code Playgroud)
Kev*_*Kev 35
如果你的字符串总是那种格式,那么正则表达式就是矫枉过正:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
Run Code Online (Sandbox Code Playgroud)
Moh*_*agd 24
试试这个:
/[^{\}]+(?=})/g
Run Code Online (Sandbox Code Playgroud)
例如
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
Run Code Online (Sandbox Code Playgroud)
将返回gskinner.com,ssd.sd.
chi*_*him 18
这是一个使用javascript替换的简单解决方案
var st = '{getThis}';
st = st.replace(/\{|\}/gi,''); // "getThis"
Run Code Online (Sandbox Code Playgroud)
正如上面接受的答案指出原始问题很容易用子串解决,但使用replace可以解决更复杂的用例
如果您有一个像"randomstring999 [fieldname]"这样的字符串,您可以使用稍微不同的模式来获取fieldname
var nameAttr = "randomstring999[fieldname]";
var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
Run Code Online (Sandbox Code Playgroud)
小智 14
这个在Textmate中工作,它匹配大括号之间的CSS文件中的所有内容.
\{(\s*?.*?)*?\}
Run Code Online (Sandbox Code Playgroud)
selector {.
.
matches here
including white space.
.
.}
如果你想进一步能够返回内容,那么将它全部包装在一组括号中,如下所示:
\{((\s*?.*?)*?)\}
Run Code Online (Sandbox Code Playgroud)
并且您可以通过$ 1访问内容.
这也适用于函数,但我没有使用嵌套的大括号进行测试.
小智 11
你想使用正则表达式前瞻和后瞻.这将只给出花括号内的内容:
(?<=\{)(.*?)(?=\})
Run Code Online (Sandbox Code Playgroud)
尝试这个
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"]
Run Code Online (Sandbox Code Playgroud)
我已经研究了其他答案,他们似乎缺少一个重要的逻辑。即,选择两个连续括号之间的所有内容,但不是括号
所以,这是我的答案
\{([^{}]+)\}
Run Code Online (Sandbox Code Playgroud)
即使它在中间发现多个右花括号,它也会匹配所有内容:
\{([\s\S]*)\}
例子:
{
"foo": {
"bar": 1,
"baz": 1,
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
234507 次 |
| 最近记录: |