如何确定字符串是否是代码方法?

时间:2016-01-24 05:44:08

标签: javascript regex

我通过两个例子来解释我的问题:

例1:

var str1 = "this is a test
                this is a test";

我想要这个:this is not code-method

例2:

var str2 = "    this is a test

                this is a tes";

我想要这个:this is code-method

因此,正如您在上面的示例中所看到的,如果所有行以(在开头)开头至少有4个空格,那么它是code-method,否则它是{{1} }。我怎么能这样做?

我所能做的只是计算行数:

not code-method

同样this regex选择换行前的所有空格。 (我不知道它是否有用)

var text = str.val();   
var lines = text.split(/\r|\r\n|\n/);
var count = lines.length;
alert(count); // it is the number of lines in the string

3 个答案:

答案 0 :(得分:1)

正则表达式/\n?\s+/gm将选择开头有一个或多个空格的行。您需要检查该行是否以四个空格开头。

您可以使用

/^ {4}/gm

RegEx Explanation

  1. ^:行首
  2. {4}:匹配四个空格
  3. gm:全局和多行标记
  4. // RegEx
    var linebreak = /\r\n|\r|\n/g,
        coded = /^ {4}/gm;
    
    function isCoded(str) {
      return str.split(linebreak).length === (str.match(coded) || []).length;
    }
    
    var str1 = `    this is a test
                    this is a tes`,
        str2 = ` this is test
        not coded`;
    
    document.body.innerHTML = str1 + ': is-coded? ' + isCoded(str1) + '<br />' + str2 + ': is-coded? ' + isCoded(str2);

答案 1 :(得分:1)

这样的东西
> str1.split(/\r|\r\n|\n/).length == str1.match(/^\s{4,}/gm).length
< false

> str2.split(/\r|\r\n|\n/).length == str2.match(/^\s{4,}/gm).length
< true

答案 2 :(得分:1)

如果你想弄清楚字符串是否有效,你需要返回一个布尔值。

您可以在换行符上拆分字符串,然后使用带有谓词函数的every方法来测试每行是否符合您的条件。

function isCodeMethod(string) {
  const hasIndent = /^\s{4}/;
  return string
    .split("\n")
    .every(s => hasIndent.test(s));
}

有一些测试输入。

// false
isCodeMethod("this is a test")

// true
isCodeMethod("    this is a test")

// false
isCodeMethod(`    this is a test1
this is a test2`)

// true
isCodeMethod(`    this is a test1
this is a test2`)

// true
isCodeMethod(`    this is a test1
                  this is a test2`)