使用Javascript提取简单字符串的一部分

使用Javascript提取简单字符串的一部分,javascript,regex,string,Javascript,Regex,String,假设我有这些字符串,每一行都是一个单独的字符串: EducationLink BioLink InterestsLink 我想用Javascript提取非链接的部分。我该怎么做?预期结果如下: Education Bio Interests 我试过正则表达式,但我对它们不是很有经验,结果失败了: /^ (^Link) $/ 使用诸如slice和substr之类的字符串函数,我只获得所选文本右侧的值,而不是所需的左侧的值 谢谢你的帮助 您可以使用。替换 text = input.replac

假设我有这些字符串,每一行都是一个单独的字符串:

EducationLink
BioLink
InterestsLink
我想用Javascript提取非链接的部分。我该怎么做?预期结果如下:

Education
Bio
Interests
我试过正则表达式,但我对它们不是很有经验,结果失败了:

/^ (^Link) $/
使用诸如slice和substr之类的字符串函数,我只获得所选文本右侧的值,而不是所需的左侧的值

谢谢你的帮助

您可以使用。替换

text = input.replace(/Link(\n|$)/g,"\n");
问题是,您可以使用regex来进行替换,但是如果没有更多的替换,那么这是一个如此简单的场景,为什么您会使事情过于复杂?

您可以使用.replace

问题是,您可以使用正则表达式来进行替换,但如果没有更多的替换,那么这是一个如此简单的场景,为什么您会使事情过于复杂?

您需要将链接放在正则表达式的末尾,例如:

^([A-Z]+)Link$
这符合:

A和Z之间的一个或多个字符 然后是Link这个词 然后是字符串的结尾 括号中的部分将作为一个组返回

此外,如果只需删除后缀链接,则可以在Javascript中使用replace方法:

var x = myStr.replace('Link', '');
您需要将链接放在正则表达式的末尾,例如:

^([A-Z]+)Link$
这符合:

A和Z之间的一个或多个字符 然后是Link这个词 然后是字符串的结尾 括号中的部分将作为一个组返回

此外,如果只需删除后缀链接,则可以在Javascript中使用replace方法:

var x = myStr.replace('Link', '');
一种方法是使用

一种方法是使用

试试这个:

试试这个:


正如其他人所指出的,如果所有字符串都以“Link”结尾,只需使用replace。否则,以下任何方法都可以正常工作:

var i = 0;
var strings = [
    'EducationLink',
    'BioLink',
    'InterestsLink'
];
var s = '';
var r = /^(.+)Link$/
for (i = 0; i < strings.length; i += 1) {
    s = strings[i];
    //s = s.substring(0, s.indexOf('Link')); //Uncomment for substring
    //s = s.match(r)[1]; //Uncomment for regex
    s = s.replace('Link', '');
    strings[i] = s;
}
console.log(strings);

虽然一个正则表达式中可以有两个字符串起始标识符,但只有一个字符串起始标识符。^字符仅是包含在方括号中的字符类中的一个否定字符,而不是曲线字符。如果要捕获文字插入符号^,请在其前面加一个反斜杠\^。

正如其他人所指出的,如果所有字符串都以“Link”结尾,只需使用替换。否则,以下任何方法都可以正常工作:

var i = 0;
var strings = [
    'EducationLink',
    'BioLink',
    'InterestsLink'
];
var s = '';
var r = /^(.+)Link$/
for (i = 0; i < strings.length; i += 1) {
    s = strings[i];
    //s = s.substring(0, s.indexOf('Link')); //Uncomment for substring
    //s = s.match(r)[1]; //Uncomment for regex
    s = s.replace('Link', '');
    strings[i] = s;
}
console.log(strings);


虽然一个正则表达式中可以有两个字符串起始标识符,但只有一个字符串起始标识符。^字符仅是包含在方括号中的字符类中的一个否定字符,而不是曲线字符。如果要捕获文字插入符号^,请在其前面加一个反斜杠\^。

如果假设每一行都是单独的字符串,则应改为:text=input.replace/Link$/;。不过,我不确定OP的意思是什么。每一行都是一个单独的字符串,对此我很抱歉。更新的正则表达式仍然可以工作,但如果需要,可以将其简化为/Link$/g。如果假设每一行都是一个单独的字符串,那么它应该是这样的:text=input.replace/Link$/;。不过,我不确定OP的意思是什么。每一行都是一个单独的字符串,很抱歉。更新的正则表达式仍然可以工作,但是如果您愿意,您可以将其简化为/Link$/g。哦,这很明显。然而,为什么我的正则表达式不起作用?你的正则表达式没有多大意义。^字符用于匹配字符串的开头,或对括号组中的字符求反。例如[^Link]将表示任何既不是L、也不是i、也不是n或k的字符。好的,但我使用了普通括号,而不是方括号[]。我想不出任何与您的表达式匹配的字符。哦,这很明显。然而,为什么我的正则表达式不起作用?你的正则表达式没有多大意义。^字符用于匹配字符串的开头,或对括号组中的字符求反。例如[^Link]将表示既不是L,也不是i,也不是n,也不是k的任何字符。好的,但我使用的是普通括号,而不是方括号[]。我想不出任何与您的表达式匹配的字符。因为如果有多行需要处理。因为在某处的绳子中间可能有链接。因为普通字符串替换可能会出现很多问题。除此之外,没有理由。这两种情况都不是真的,所以这似乎是最好的答案。@Kolink没有必要让你的内裤陷入困境。询问者明确地说他有几个字符串,然后列出它们。因为如果有多行需要处理。因为在某处的绳子中间可能有链接。因为普通字符串替换可能会出现很多问题。除此之外,没有理由。这两种情况都不是真的,所以这似乎是最好的答案。@Kolink没有必要让你的内裤陷入困境。询问者明确地说他有几个字符串,并继续列出它们。
/^ (^Link) $/
//Each regex term on own line, commented below
^   //start of string
    //Literal space
(^Link) //Capturing group, string starting with 'Link'.
    //Literal space
$   //end of string