获取字符串中包含子字符串的单词列表
Get list of words containing substring in string
我有一个脚本,如果输入的值包含子字符串'sn',则运行,但我需要它忽略该子字符串的任何实例,如果它们紧随字母t或撇号。
这样做的原因是输入的值包含设备的序列号,脚本可以挑选出序列号,因为它前面有字母"sn"。问题是,如果用户输入诸如"wasn't"或"isn't"之类的单词(可以带或不带撇号,取决于输入它的人),脚本将获得'sn'的最后一个实例。我需要它完全忽略那些字。
我用来检查'sn'的代码是…
var lowercase_name = subject.toLowerCase();
var has_sn = lowercase_name.indexOf("sn") > -1;
if(has_sn === true){
//do something
}
要用字符串做这样的事情,indexOf
不够好,因为你不能有异常。regexp就足够好了。您的条件是"忽略该子字符串的任何实例,如果它们立即"。这意味着你应该使用否定的展望((?!)
)。
在您的情况下,好的正则表达式应该是:
var lowercase_name = subject.toLowerCase();
var has_sn = lowercase_name.match(/sn(?!['t])/);
if(has_sn){
//do something
}
-
(?!)
=负面展望。搜索sn
不跟随!
后面的内容 -
[]
= "或"字符。匹配括号内的任意字符。
现在,如果您想创建更复杂的任务,您应该查看一些regexp教程
您需要使用正则表达式:
subject.match(/^sn/i)
^
表示从字符串的开头匹配,除了字符sn
在开头。末尾的i
表示不区分大小写的匹配,因此您不必将subject
转换为小写。如果在sn
开始之前有空格或任何其他字符,这将不起作用。如果你想支持这些案件,你就必须相应地处理它们。
如果您知道序列号中可能包含的所有字符,则可以使用regex捕获组来匹配整个序列号。以下正则表达式可用于匹配任何带有数字或单词的SN:
/^(sn[0-9a-z]+)/i
[0-9a-z]+
表示任何数字(0-9)和任何字母(a-z)。+
表示匹配这些数字/字符中的1个或多个,由于它是不区分大小写的匹配,因此它将匹配小写和大写字符。匹配将以第一个未列出的字符结束,例如空格、符号(+
、-
等)等。
正如您在链接的示例中看到的,您可以检查.match
是否返回null
,在这种情况下,这意味着它不匹配任何内容。
此方法将按您所期望的方式处理序列号,而不是仅仅忽略您想到的情况。你永远不应该假设用户会写出合适的英语单词,或者英语,甚至是有任何意义的单词。只忽略"sn"后面跟着"nt"或"n't"的单词是一种糟糕的方法。如果用户键入"snooze",您仍然会将其匹配为序列号,尽管我认为您不会真的想要这样。
这里可以使用正则表达式。表达式sn[^t']
将匹配任何包含st,但后面没有撇号或字母t的字符串。
var has_sn = /sn[^t']/.test(lowercase_name)
if (has_sn) { /* do something */ }
你可以使用正则表达式:
var name = "name"
var patt = /sn[^t']/i
if(patt.test(name)){
//do something
}
不使用正则表达式的解决方案:
var lowercase_name = subject.toLowerCase();
var index = lowercase_name.indexOf("sn");
var char = lowercase_name.substring(index+2, index+3);
if(index != -1 && char != "t" && char != "'"){
//do something
}
- 如何在Javascript中从字符串中提取某些单词
- 如何在PHP中获取特定的字符串单词
- 对字符串使用IndexOf来挑选某些单词
- 如何替换数据属性中的特定字符串单词
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 我如何从字符串中选出第一个单词的第一个字母,然后再选出第二个单词
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 类别自动完成jQuery中的单词级自定义筛选器,而不是子字符串
- 测试字符串中的多个单词
- 正则表达式以更改字符串中的某些单词
- 输出包含3个单词的字符串中的前2个单词
- Geoplugin字符串结果为德语单词/语言
- 如何知道找到的单词是字符串的一部分还是JavaScript中的函数调用
- 跳过用户输入的文本字符串中的特殊字符,并在 Javascript 中的每个单词后添加连字符
- 单词数组到字符串
- 检查字符串是否等于一个单词和一个数字
- 使用jQuery在p-tag中查找给定字符串的前10个单词和下10个单词
- 计算字符串javascript中的某些单词
- 确定字符串是否包含子字符串(单词)
- 用js替换带有空格的字符串单词