Javascript 如何创建一个函数来获得一个特定字符串前后7个单词的匹配?
您好,我想做一个javascript函数来返回一个特定关键字的数学前后7个单词 我做了如下尝试:Javascript 如何创建一个函数来获得一个特定字符串前后7个单词的匹配?,javascript,regex,string,function,Javascript,Regex,String,Function,您好,我想做一个javascript函数来返回一个特定关键字的数学前后7个单词 我做了如下尝试: function myFunction(text) { b=text.match("(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,7}"+text+"(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,7}"); return b; 然而,当我在我的文本“创建”中搜索时,我得到了: create 我期望的结果是: the Community, and
function myFunction(text) {
b=text.match("(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,7}"+text+"(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,7}");
return b;
然而,当我在我的文本“创建”中搜索时,我得到了:
create
我期望的结果是:
the Community, and view patterns you create or favorite in My Patterns. Explore results
我的完整代码如下所示,对应的字符串名为Text,因此我非常感谢您为完成此任务提供的支持
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var Text='RegExr was created by gskinner.com, and is proudly hosted by Media Temple. Edit the Expression & Text to see matches. Roll over matches or the expression for details. PCRE & Javascript flavors of RegEx are supported. The side bar includes a Cheatsheet, full Reference, and Help. You can also Save & Share with the Community, and view patterns you create or favorite in My Patterns. Explore results with the Tools below. Replace & List output custom results. Details lists capture groups. Explain describes your expression in plain English.'
function myFunction(text) {
b=text.match("(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,7}"+text+"(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,7}");
return b;
}
document.getElementById("demo").innerHTML = myFunction("create");
</script>
</body>
</html>
var Text='RegExr由gskinner.com创建,并由Media Temple自豪地主持。编辑表达式和文本以查看匹配项(&T)。滚动匹配或表达式以获取详细信息。支持正则表达式的PCRE和Javascript风格。侧栏包括备忘单、完整参考和帮助。您还可以保存并与社区共享,并查看您在“我的模式”中创建或喜爱的模式。使用以下工具探索结果。替换&列出输出自定义结果。详细信息列表捕获组。解释用通俗易懂的英语描述你的表情
函数myFunction(文本){
b=文本匹配((?:[a-zA-Z'-]+[^a-zA-Z'-]+{0,7}“+text+”(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,7});
返回b;
}
document.getElementById(“demo”).innerHTML=myFunction(“创建”);
正则表达式不是执行此类任务的好工具。我建议使用split
将句子拆分为一个单词数组,然后使用indexOf
找到匹配的单词并打印相邻的单词
下面是一个工作示例:
let-station=“诸如此类的社区,并查看您在我的模式中创建或喜爱的模式。探索结果诸如此类的”;
让单词=句子。拆分(“”);
让index=words.indexOf(“创建”);
让结果=[];
如果(索引>-1){
对于(i=索引-7;i<(索引+8);i++){
结果推送(字[i]);
}
}
console.log(result.join(“”)
您可以将文本拆分为单词数组并找到单词的索引,然后使用数组#slice()
和数组#join()
如果word在下列空格前包含此类标点符号,则Following还会删除
和,
标点符号以进行匹配,并规范大小写匹配
var Text='RegExr由gskinner.com创建,并由Media Temple自豪地托管。编辑表达式和文本以查看匹配项(&T)。滚动匹配或表达式以获取详细信息。支持正则表达式的PCRE和Javascript风格。侧栏包括备忘单、完整参考和帮助。您还可以保存并与社区共享,并查看您在“我的模式”中创建或喜爱的模式。使用以下工具探索结果。替换&列出输出自定义结果。详细信息列表捕获组。解释用通俗易懂的英语描述你的表情
变量项='创建',
单词=文本。拆分(“”),
index=words.findIndex(s=>s.replace(/,| \.$/,'').toLowerCase()==term.toLowerCase()),
开始=索引>6?指数-7:0;
var res=words.slice(开始,索引+8).join(“”)
console.log(res)
您的尝试存在一些问题:
new RegExp()
文本
中查找文本
,这显然不是您想要的。因此,使用不同的变量名,并将它们传递给函数{0,7}
),这将被视为匹配!为了避免这种情况,需要在字符串后面或末尾至少有一个单词中断。匹配词前面的部分也是如此:它不应该是完全可选的。使用{1,7}
并且不需要其中的单词部分(*
)。分别作为备选方案^
或$
给出match
方法将返回一个数组,因此您需要返回该数组中的值(如果存在匹配项)var text='RegExr由gskinner.com创建,并由Media Temple自豪地主持。编辑表达式和文本以查看匹配项(&T)。滚动匹配或表达式以获取详细信息。支持正则表达式的PCRE和Javascript风格。侧栏包括备忘单、完整参考和帮助。您还可以保存并与社区共享,并查看您在“我的模式”中创建或喜爱的模式。使用以下工具探索结果。替换&列出输出自定义结果。详细信息列表捕获组。解释用通俗易懂的英语描述你的表情
函数myFunction(文本,查找){
b=text.match(新的RegExp((?:(?:[a-zA-Z'-]*[^a-zA-Z'-]+){1,7}| ^)“+find+”(?:(?:[^a-zA-Z'-]+[a-zA-Z'-]*){1,7}|$));
返回b&b[0];
}
log(myFunction(文本“create”)代码>您的正则表达式非常适合我
你的问题在于你有两个名字相似的变量:Text
和Text
将b=text.match
更改为b=text.match
,因为您希望与函数外部的字符串进行匹配。当前,将表达式与仅包含所需单词的字符串相匹配
当您进行更改时,还需要查找其他内容:match返回第一个出现的“create”
,它恰好是第三个单词的子字符串。您可能需要考虑修改表达式以防止部分匹配。 这个如何:
(?:\w+[,\.]? ){6}create(?:[\,.]? \w+){7}
(?:\w+[,\.]?)
是一个后跟逗号或点以及空格的单词
{6}
指示该单词将出现6次
创建
function myFunction(text) {
b=Text.match(new RegExp('(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,7}\b' + text + '\b(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,7}');
return b;
}