javascript - 选择不是开始于但结束于之间的所有内容

标签 javascript regex

所以我正在尝试使用 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"
}

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

  1. 我们希望您的话之前的领先地位是开始 行 ^ 或空格 \s.

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

  3. 单词后面必须跟{,为此我们使用lookahead 通过 (?=\{)

JavaScript 的正则表达式引擎不支持 lookbehind ,因此您必须使用非捕获组 (?:...) 来匹配单词前的前导位置。

参见 JavaScript regular expressions and sub-matches有关如何访问捕获组的说明

参见 https://regex101.com/r/bT8sE5/5获得带有进一步解释的正则表达式的现场演示。

关于javascript - 选择不是开始于但结束于之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690305/

相关文章:

regex - 单词负前瞻的意外结果(R 正则表达式)

javascript - js中正则表达式使用+问题

javascript - Angular - 脚本加载顺序

javascript - Bresenham 同心圆留下空像素

javascript - 谷歌地图错误?显示的标记根据缩放级别而变化

java - 如何在java中使用正则表达式分割字符串

javascript - jQuery:如何为输入字段值设置固定小数

r - 使用 tidytext 保留 ngrams 分析中的连字符单词

javascript - 如何在使用 chrome 媒体库 api 时过滤文件类型(扩展名)

php - 使用正则表达式分隔组中的字符串