在干草堆中查找完全匹配,但仅当文本不是较大字符字符串的一部分时才找到

Rmmoul

我的google-fu在这里使我失败了,因为我不确定如何在没有获得用于在javascript的大海捞针中找到字符串的通用结果的情况下搜索答案。如果这是一个重复的问题,请让我知道,我将结束这个问题。

我想做什么

我目前正在使用JavaScript中的indexOf()搜索文本,以查找以@ char开头的用户名。indexOf在大多数情况下都可以正常工作,但是当用户使用的名称也属于另一个用户的名称时,失败。

例如,使用indexOf(),当文本指向“ @RandomDonkeyKong”或“ @RandomDonkeyFarmer”时,我当前获得与用户名“ RandomDonkey”的匹配。

我在寻找什么

我想找到一种最有效的方法,以确保包含(例如)“ @ RandomDonkeyFarmer”的消息不会引起用户“ RandomDonkey”的警报,因为仅完全匹配,而用户名中没有多余的字符@RandomDonkey”应引起警报。

我考虑过的

我不太擅长编写正则表达式,因此我认为这是一种可能的解决方案,但不确定如何编写。

我还考虑过寻找匹配项,并进一步检查了最后一个字符之后是否有空格以外的其他字符(假设用户名未以字符串结尾)。

是否有更好的方法可以解决此问题,还是这两种解决方案之一是最有效的?

我当前正在使用的代码以及应该通过/失败的一些示例

var username = 'RandomDonkey';

if(message.toLowerCase().indexOf('@' + username.toLowerCase()) != -1){
   alert('this is a direct message');
}//if direct message
else{
    alert('this is NOT a direct message');
}

应该传递的一些消息:

message = "Hey @randomdonkey what's going on?";
message = "@RandomDonkey what are you up to";
message = "These are silly examples @RandomDonkey";

一些应该失败的消息:

message = "@RandomDonkeyKong is not a match for RandomDonkey";
message = "I'm messaging @RandomDonkeyFarmer";

当前所有这些示例都通过了indexOf()的工作方式,这就是为什么我正在寻找另一种方法的原因。

佩兹库

我相信正则表达式确实是答案。这在大多数情况下应该有效:

var username = "RandomDonkey"
var text = "hey @RandomDonkey are you something something etc."

var re=new RegExp("@"+username+"\b", "i")
if (re.test(text)) {
    alert(username);
}

当用户名中只能包含单词字符(例如AZ,az,0-9和下划线字符_)时,此方法有效

要允许用户名带有破折号,以便不间断,请"\b"在正则表达式中使用它:"([^\\w\\-]|$)"

因此,正则表达式定义行变为: var re=new RegExp("@"+username+"([^\\w\\-]|$)", "i")

它寻找与单词字符或破折号匹配的字符,因此任何密码都不应包含或字符串的末尾。

可能出现的唯一问题是,如果用户名中包含特殊的正则表达式字符,只需禁止不匹配的用户名^[\w\-]+$(一个或多个字母,数字,破折号和下划线,仅此而已)即可轻松避免。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Linq可以用于查找值是否匹配较大字符串的一部分吗?

来自分类Dev

MySQL通过仅知道一部分来查找较大的字符串

来自分类Dev

Excel:当名称是一列中较长字符串的一部分时,查找列之间的匹配名称

来自分类Dev

检测R中字符串的一部分(不完全匹配)

来自分类Dev

在替换字符串中查找并使用找到的字符串的一部分进行替换

来自分类Dev

如何仅匹配Javascript中的字符串的一部分或包含的字符串

来自分类Dev

仅当该行还不是文件的一部分时才在文件中插入行

来自分类Dev

为什么我的正则表达式捕获组在匹配多个部分时仅捕获字符串的最后一部分?

来自分类Dev

干草堆2 SearchQuerySet与按与确切的字符串匹配的列表进行筛选

来自分类Dev

在字符串数组中查找字符串的一部分

来自分类Dev

MYSQL-查找行,其中搜索字符串的一部分与列中的值的一部分匹配

来自分类Dev

Java replaceAll仅查找字符串的一部分

来自分类Dev

Java replaceAll仅查找字符串的一部分

来自分类Dev

使用VLOOKUP Excel仅匹配输入字符串的一部分

来自分类Dev

JavaScript Regexp仅匹配字符串的一部分

来自分类Dev

MySQL查询以查找字符串的一部分是否不是数字

来自分类Dev

在字符串中查找完全匹配-C#

来自分类Dev

如何在C ++中的字符串中找到完整的单词(不是单词的一部分)

来自分类Dev

仅使用现有字符串的一部分查找和替换文本字符串

来自分类Dev

在javascript字符串搜索中查找整个单词而不是单词的一部分

来自分类Dev

Excel VBA:使InStr查找整个字符串,而不是字符串的一部分

来自分类Dev

PowerShell:查找文本文件中的单词是否是字符串数组的一部分

来自分类Dev

尝试替换字符串的一部分时出现“致命:被零除”

来自分类Dev

仅当字符串包含确定的子字符串时,才获取字符串的一部分

来自分类Dev

仅搜索数据库字符串的一部分时(通过PHP语句)打印数据库字符串

来自分类Dev

当 <td> 是字符串的一部分时,尝试根据条件在 <td> 标记中添加/更改类

来自分类Dev

当字符串只是列表项的一部分时,如何查找列表中所有出现的字符串

来自分类Dev

当输入的文本不是datsource的一部分时处理WPF Editable组合框

来自分类Dev

仅返回linqQuery中的一部分字符串

Related 相关文章

  1. 1

    Linq可以用于查找值是否匹配较大字符串的一部分吗?

  2. 2

    MySQL通过仅知道一部分来查找较大的字符串

  3. 3

    Excel:当名称是一列中较长字符串的一部分时,查找列之间的匹配名称

  4. 4

    检测R中字符串的一部分(不完全匹配)

  5. 5

    在替换字符串中查找并使用找到的字符串的一部分进行替换

  6. 6

    如何仅匹配Javascript中的字符串的一部分或包含的字符串

  7. 7

    仅当该行还不是文件的一部分时才在文件中插入行

  8. 8

    为什么我的正则表达式捕获组在匹配多个部分时仅捕获字符串的最后一部分?

  9. 9

    干草堆2 SearchQuerySet与按与确切的字符串匹配的列表进行筛选

  10. 10

    在字符串数组中查找字符串的一部分

  11. 11

    MYSQL-查找行,其中搜索字符串的一部分与列中的值的一部分匹配

  12. 12

    Java replaceAll仅查找字符串的一部分

  13. 13

    Java replaceAll仅查找字符串的一部分

  14. 14

    使用VLOOKUP Excel仅匹配输入字符串的一部分

  15. 15

    JavaScript Regexp仅匹配字符串的一部分

  16. 16

    MySQL查询以查找字符串的一部分是否不是数字

  17. 17

    在字符串中查找完全匹配-C#

  18. 18

    如何在C ++中的字符串中找到完整的单词(不是单词的一部分)

  19. 19

    仅使用现有字符串的一部分查找和替换文本字符串

  20. 20

    在javascript字符串搜索中查找整个单词而不是单词的一部分

  21. 21

    Excel VBA:使InStr查找整个字符串,而不是字符串的一部分

  22. 22

    PowerShell:查找文本文件中的单词是否是字符串数组的一部分

  23. 23

    尝试替换字符串的一部分时出现“致命:被零除”

  24. 24

    仅当字符串包含确定的子字符串时,才获取字符串的一部分

  25. 25

    仅搜索数据库字符串的一部分时(通过PHP语句)打印数据库字符串

  26. 26

    当 <td> 是字符串的一部分时,尝试根据条件在 <td> 标记中添加/更改类

  27. 27

    当字符串只是列表项的一部分时,如何查找列表中所有出现的字符串

  28. 28

    当输入的文本不是datsource的一部分时处理WPF Editable组合框

  29. 29

    仅返回linqQuery中的一部分字符串

热门标签

归档