所以我正在尝试使用 JS 选择一些名称,但我知道如何操作。我在这里找到了 3 个解决方案,但仍然无法正常工作:
我想选择不以 .
开头且必须以 {
这是我的:
\b(?!\.)[\w\-]+(?=\s*{)\b
也试过:^(?!\.)[\w\-]+(?=\s*:)
示例:
.测试{}
测试 { } <--- 选择这个测试
最佳答案
如果您希望匹配 -^!foo {}
,请使用 (?:\s|^)([^\s\.]+(?=\s*\{))
.
如果您只想匹配 foo {}
,请使用 (?:[^\w\.]|^)([^\W\.]+(?=\s*\{))
.
var pattern1 = /(?:\s|^)([^\s\.]+(?=\s*\{))/gm,
pattern2 = /(?:[^\w\.]|^)([^\W\.]+(?=\s*\{))/gm,
text = ".foo{} bar {} !!baz{} ..-boom {}",
match;
console.log('First pattern:');
while (match = pattern1.exec(text)) {
console.log(match[1]); // Prints "bar", "!!baz"
}
console.log('Second pattern:');
while (match = pattern2.exec(text)) {
console.log(match[1]); // Prints "bar", "baz", "boom"
}
第一个正则表达式的解释:
我们希望您的话之前的领先地位是开始 行
^
或空格\s
.单词本身由重复的非空白字符组成 不是点
[^\s\.]
.单词后面必须跟
{
,为此我们使用lookahead 通过(?=\{)
。
JavaScript 的正则表达式引擎不支持 lookbehind ,因此您必须使用非捕获组 (?:...)
来匹配单词前的前导位置。
参见 JavaScript regular expressions and sub-matches有关如何访问捕获组的说明
参见 https://regex101.com/r/bT8sE5/5获得带有进一步解释的正则表达式的现场演示。
关于javascript - 选择不是开始于但结束于之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690305/