假设我有这些字符串(每个新行都是一个单独的字符串):
EducationLink
BioLink
InterestsLink
我想用Javascript提取不是“链接”的部分。我该怎么做?预期的结果是
Education
Bio
Interests
我尝试了一个正则表达式,但我对它们不是很有经验,但它失败了:
/^ (^Link) $/
使用slice()和substr()之类的字符串函数,我只得到所选文本的右侧的值,而不是所需的左侧。
感谢您的帮助。
答案 0 :(得分:2)
text = input.replace(/Link(\n|$)/g,"\n");
答案 1 :(得分:2)
您可以使用.replace()
'EducationLink'.replace('Link', ''); //returns Education
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace
问题是你可以使用正则表达式来替换它,但是这样一个简单的场景(除非它有更多的东西)为什么你会使事情复杂化?
答案 2 :(得分:1)
您需要将Link
放入RegEx的末尾,例如:
^([A-Z]+)Link$
匹配:
Link
括号中的部分将作为一组返回。
此外,如果你需要做的只是删除后缀Link
,你可以在Javascript中使用replace()
方法:
var x = myStr.replace('Link', '');
答案 3 :(得分:0)
一种方法是使用String.split()MDN
var txt = 'EducationLink'.split('Link')[0]; // txt == 'Education'
答案 4 :(得分:0)
试试这个:
<script>
var str = "EducationLink";
index = str.search(/link/i);
str = str.substr(0,index);
</script>
答案 5 :(得分:0)
正如其他人所指出的那样,如果所有字符串都以'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);
复制并粘贴到浏览器控制台窗口以运行。
要回答您的问题(“但是,为什么我的RegEx不起作用?”)在对另一个答案的评论中,您的RegEx会执行以下操作:
/^ (^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
虽然在Regex中可以有两个“字符串开头”标识符,但只会有一个“字符串开头”。 ^
字符只是字符类中的否定,它用方括号括起来,而不是弯曲的。如果要捕获文字插入符号^
),请在其前面添加反斜杠(\^
)。