Javascript中的RegEX来匹配单词集
RegEX in Javascript to match set of word
我需要编写一个正则表达式以在我的JavaScript中使用,以便我可以匹配一组连续的三个单词。这三个词将变量称为"之前","错误","之后"。问题是"错误"总是存在的,但由于它可以是句子开头或结尾的锚点,因此可能会缺少"之前"或"之后"。所以为了说明:
如果before= "this" after = "that" error="fail"
在句子中:test = "this fail that, but fail is not part of the result but can be in the case it is like this, fail"
结果将是:
this fail that
this fail
其中只有 2 个正确返回,因为它们具有"错误"字和两个边字中的至少一个。它们可以是单词之间的符号,因为我没有得到标点符号。
我正在尝试学习正则表达式,但到目前为止,我只能设法检索错误词,例如:new RegExp("''b" + motErreur + "''b", "gi");
我为这三个词所做的尝试似乎无法正常工作:
pattern = @"(?:^'W*|(?<"+before+">'w+)'W+)" + error + @"(?:'W+(?<"+after+">'w+)|'W*$)";
作为模式,如果取自我的代码中的 C# 示例并在 Javascript 中需要它,我不知道这是否是让他失败的原因。
我怎样才能用一个简单的正则表达式来做到这一点? 然后目的是替换句子返回的部分(我已经为此编写了函数,我只在这个正则表达式中失败)。
由于您在 JS 中使用模式,因此您需要使用构造函数表示法并使用编号的捕获组而不是(?<name>....)
命名的捕获组:
var before= "this", after = "that", error="fail";
var re = RegExp("(?:^''W*|(" + before.replace(/[.*+?^${}()|[']'']/g, "''$&") + ")''W+)" + error.replace(/[.*+?^${}()|[']'']/g, "''$&") + "(?:''W+(" + after.replace(/[.*+?^${}()|[']'']/g, "''$&") + ")|''W*$)", "g");
var str = 'this fail that, but fail is not part of the result but can be in the case it is like this fail';
var m;
while ((m = re.exec(str)) !== null) {
document.body.innerHTML += m[0] + "<br/>";
}
注意:
- 由于您是动态构建模式的,因此需要使用构造函数表示法 (
RegExp(...)
) - 在构造函数表示法中,
'
必须加倍 - 由于
key
可以包含特殊的正则表达式元字符,因此必须对其进行转义才能将其视为文字(我添加了.replace(/[.*+?^${}()|[']'']/g, "''$&")
) - 上下文词在
m[1]
和m[2]
中。使用前检查它们是否未undefined
。
如果正确理解了问题,请尝试(this's+fail's+that|this's+fail|fail's+that)
。
使用正则表达式和 exec 方法来查找每个匹配项:
var rgx = new RegExp("(" + before + "'''s*" + error + "'''s*(" + after + ")*)", "g")
var resultArray = rgx.exec(test);
resultArray 中的匹配项是索引 1 处的项(例如 resultArray[1])。在 resultArray 不为 null 时调用 exec 方法以查找所有匹配项。
所以你可以写一个函数:
function getMatches(str)
{
var before= "this";
var after = "that";
var error = "fail";
var array = new Array();
var rgx = new RegExp("(" + before + "'''s*" + error + "'''s*(" + after + ")*)", "g")
var matches = rgx.exec(test);
while(matches != null)
{
array.push(matches[1]);
matches = rgx.exec(test);
}
return array;
}
- React中的数据集表示
- 当鼠标悬停在文本中的单词上时显示警报
- 使用jQuery检查提交时添加到句子中的单词
- 如何替换数据属性中的特定字符串单词
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 如何在分页事件中突出显示数据表中的单词
- Javascript/jQuery替换tamil语言输入框中的最后一个单词
- 类别自动完成jQuery中的单词级自定义筛选器,而不是子字符串
- 突出显示页面上嵌入的iframe中的单词
- 如何忽略单词like“”中的未使用空格;测试-文本”;同时构建html标签
- 测试字符串中的多个单词
- 正则表达式以更改字符串中的某些单词
- Chart.js2.X中的条形值-数据集元数据未定义
- 输出包含3个单词的字符串中的前2个单词
- 选中javascript中的属性集时,复选框更改事件未触发
- undercore返回数组中对象的indes,其中单词存在于对象中的句子中
- 如何通过JavaScript正则表达式匹配不同语言中的单词
- 仅匹配给定字符串中单词序列中的字符
- Javascript中的RegEX来匹配单词集
- 我的单词代码中的大写字母有什么问题