我通过两个例子来解释我的问题:
例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
答案 0 :(得分:1)
正则表达式/\n?\s+/gm
将选择开头有一个或多个空格的行。您需要检查该行是否以四个空格开头。
您可以使用
/^ {4}/gm
^
:行首{4}
:匹配四个空格gm
:全局和多行标记
// 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`)