gpt4 book ai didi

javascript - 正则表达式仅匹配字符串,不匹配子字符串

转载 作者:行者123 更新时间:2023-11-29 21:07:12 25 4
gpt4 key购买 nike

当单击表格中的值时,我将字符串添加到文本区域。必须可以选择和取消选择表格中的值,并且它们会在文本区域中添加/删除自己。 textarea 必须是字符串,并且添加的值不能包含在任何其他字符中。

正在添加的值可能包含任何字符,并且可能将其他值之一作为子字符串,以下是一些示例:HOLE 1HOLE 11 , HOLE 17, HOLE (1), cutaway, cut, away, cut-away, 评论员 (SMITH, John), (GOAL), GOAL

一旦将一个值附加到文本区域,并再次单击以取消选择它,我将搜索该值并将其删除,如下所示:

var regex = new RegExp("(?![ .,]|^)?(" + mySelectedText + ")(?=[., ]|$)", 'g');
var newDescriptionText = myTextAreaText.replace(regex, '');

正则表达式正确匹配文本的字符串/子字符串,例如cutawayaway 但是不适用于任何以括号开头的内容,例如(目标)。将单词边界选择器添加到表达式 \b 的开头,将使正则表达式匹配以括号开头的字符串,但不适用于包含相同文本的字符串/子字符串。

有没有办法使用正则表达式来实现这一点?还是其他什么方法?

这是一个可用的 CodePen example从表中添加/删除。

最佳答案

当您取消选择 away 并在列表中包含 cutaway 时,您可以使用字边界 (\b) 来避免出现问题。只需将正则表达式更改为:

regex = new RegExp("(?![ .,]|^)?(\\b" + cellText + "\\b)(?=[., ]|$)", 'g');
^^^ ^^^

下面是我修改后的代码:

removeFromDescription = function(cell) {
cell.classList.remove(activeClass);

// Remove from the active cells arry
var itemIndex = tempAnnotation.activeCells.indexOf(cell.textContent);
tempAnnotation.activeCells.splice(itemIndex, 1);

// Do the regex find/replace
var annotationBoxText = annotation.value,
cellText = regexEscape(cell.textContent), // Escape any funky characters from the string

regex = new RegExp("(^| )" + cellText + "( |$)", 'g');

var newDescription = annotationBoxText.replace(regex, ' ');

setAnnotationBoxValue(newDescription);

console.info('cellText: ', cellText);
console.info('annotationBoxText:', annotationBoxText);
console.info('newDescription: ', newDescription);
};

regexEscape = function(s) {
return s.replace(/([-\/\\^$*+?.()|[\]{}])/g, `\\$&`);
};

setAnnotationBoxValue = function(newValue) {
annotation.value = newValue;
};

关于javascript - 正则表达式仅匹配字符串,不匹配子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43469107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com