所以我试图用JS选择一些名字,但我可以弄清楚如何。我在这里找到了3个解决方案,但仍无法使其工作:
我想选择一个不以.
开头并且以{
以下是我所拥有的:
\b(?!\.)[\w\-]+(?=\s*{)\b
还尝试了:^(?!\.)[\w\-]+(?=\s*:)
.test {}
测试 {}< ---选择此测试
答案 0 :(得分:3)
如果您希望与-^!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并进一步说明。
答案 1 :(得分:0)
这个怎么样:
([^\w\.]|^)(\w+\{)
它基本上在行的开头说任何话,或以非词/非点字符开头。
使用\ b很棘手,因为它在点后非常愉快地匹配。你可以让它与负面前瞻一起工作,但此时它是非常时髦的东西:)
答案 2 :(得分:0)
你可以这样做:^.*\.(\w+\{\}){1}.*$
说明:
^
是字符串的开头.*
匹配点后面的所有内容(.
)(\w+\{\})*
捕获组匹配后的单词和括号(例如 test {} } 零次或多次.*
匹配$
是字符串的结尾因此,对于输入:sadasdas.test{}daasdasdasdasd
,它将匹配test{}
答案 3 :(得分:0)
以下与http://regexr.com/相关的作品 你可以在那里测试一下。
/(?![\s])(^[^.]([\S]+)[{}][\s])/igm