使正则表达式与最后一个单词不匹配

时间:2018-02-05 19:14:33

标签: javascript regex

问题:

如何除string,之外的.以外,jumps over the lazy dog中的所有字词都会被捕获?

即。 jumps抓取over the lazy jumps over the lazy dog.。但对于dog\([\w']+\b)\g也必须被捕获。

注意:这是JavaScript正则表达式。

我做了什么:

dog会捕获所有单词,但它也会在没有标点符号的情况下捕获[\w']。 (我使用$在单词中包含撇号。

我怀疑答案与Newdata <- mydata %>% filter(!grepl(".*unassigned.*",taxon)) 有关吗?​​

3 个答案:

答案 0 :(得分:2)

var r = /\w+\b(?!$)/gm
var a = [
  "jumps over the lazy dog",
  "jumps over the lazy dog."
]

a.forEach(function(s) {
  var x = []
  while(m = r.exec(s)) {
    x.push(m[0])
  }
  console.log(x)
})

\w+\b(?!$)
  • \w+匹配一个或多个单词字符
  • \b断言位置为单词边界
  • (?!$)否定前瞻确保后续内容不是行的结尾

如果您需要确保最后一个单词后跟.,,则可以使用\w+\b(?![^.,]?$)代替.。这样可以确保排除未在,var r = /\w+\b(?![^.,]?$)/gm var a = [ "jumps over the lazy dog", "jumps over the lazy dog.", "jumps over the lazy dog;" ] a.forEach(function(s) { var x = [] while(m = r.exec(s)) { x.push(m[0]) } console.log(x) })后面的行末尾的字词。展开并运行以下代码段,以便在实践中查看此备用方法。

.force_encoding("ASCII-8BIT")

答案 1 :(得分:1)

正则表达式(?![^,. ]+$)\w+

在最后一个单词[^,. ]

的末尾添加char

详细说明:

  • (?!)否定前瞻
  • [^]匹配列表中不存在的单个字符
  • \w匹配任何字词(等于[a-zA-Z0-9_]
  • +匹配一次且无限次
  • $断言位于行尾的位置

function myFunction() {
console.clear();
  var re = /(?![^,. ]+$)\w+/g;
  var s = document.getElementById("input").value;
  var m;

  do {
      m = re.exec(s);
      if (m) {
          console.log(m[0]);
      }
  } while (m);
}
<form action="javascript:myFunction()">
  <input id="input" type="text" name="lastname" value="jumps over the lazy dog."><br><br>
  <input type="submit" value="Submit">
</form>

答案 2 :(得分:0)

这似乎有效\w+\b(?=\W+\w|\s*[,.])
但我还有其他方法可以肯定。

格式化

 \w+ \b                 # word in string
 (?=                    # Check 
      \W+ \w                 # Not the last word
   |  \s* [,.]               # or, a word followed by a dot or comma
 )

&#13;
&#13;
if (matches = "asdf abcd  +=&^$#@.+)(*&".match(/\w+\b(?=\W+\w|\s*[,.])/g))
   console.log( matches );
&#13;
&#13;
&#13;