-1

我一直在尝试找到一种方法来识别输入表单上的 DOI 以触发特定搜索。我在这里找到了一个 DOI 正则表达式,当我将它与MatchTest一起使用时,我得到 'NULL' 和 Error 作为结果

function checkDOI(string){
        //Redundant. I know 
        var testKey = String(string);
        var DOIpattern = '\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)\b';

        var found = DOIpattern.test(testKey);
        console.log("found", found + " DOI "+ testKey);
        return found
      }
checkDOI("10.1016.12.31/nature.S0735-1097(98)2000/12/31/34:7-7")

我收到了这个错误DOIpattern.test is not a function

然后,如果我将 found.test 更改为 MATCHvar found = DOIpattern.match(testKey);

结果为空

有人可以告诉我我做错了什么吗?

预先感谢!

4

2 回答 2

0

testRegExp类的方法,而不是String. 要更正,请使用构造函数创建一个 RegExp 对象并test在其上调用方法。

function checkDOI(string) {
  //Redundant. I know 
  var testKey = String(string);
  var DOIpattern = '\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)\b';

  var found = new RegExp(DOIpattern).test(testKey);
  console.log("found", found + " DOI " + testKey);
  return found
}

checkDOI("10.1016.12.31/nature.S0735-1097(98)2000/12/31/34:7-7")

只要您的 RegExp 字符串正确,输入就应该匹配。

于 2018-08-13T14:39:03.780 回答
0

使用构造函数创建一个 RegExp 对象并在其上调用测试方法。

谢谢!你的回应奏效了。以防万一其他人正在寻找一个我正在使用的正则表达式写得不正确,所以我把它剪成这个

\b(10[.][0-9]{4,}(?:[.][0-9]+)*\b/g

最终版本如下所示:

 checkDOI(string){
        var DOIpattern = new RegExp(/\b(10[.][0-9]{4,}(?:[.][0-9]+)*)\b/g);
        // var DOIpattern = ;
        var found = DOIpattern.test(testKey);
        console.log("found", found + " DOI "+ testKey);
        return found
      }
于 2018-08-13T15:15:45.310 回答