选择不是以开头但以结尾的所有内容

时间:2016-06-07 22:15:54

标签: javascript regex

所以我试图用JS选择一些名字,但我可以弄清楚如何。我在这里找到了3个解决方案,但仍无法使其工作:

我想选择一个不以.开头并且以{

结尾的单词

以下是我所拥有的: \b(?!\.)[\w\-]+(?=\s*{)\b

还尝试了:^(?!\.)[\w\-]+(?=\s*:)

实施例

.test {}

测试 {}< ---选择此测试

4 个答案:

答案 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"
}

第一个正则表达式的解释:

  1. 我们希望在你的话语之前的领先位置要么是开始 行^或空格\s

  2. 单词本身由重复的非空白字符组成 不是点[^\s\.]

  3. 该字必须后跟{,我们使用lookahead 通过(?=\{)

  4. 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{}

在此处试试:https://regex101.com/r/hE4uY4/1

答案 3 :(得分:0)

以下与http://regexr.com/相关的作品 你可以在那里测试一下。

/(?![\s])(^[^.]([\S]+)[{}][\s])/igm