搜索
查看: 1703|回复: 22

如何判断某字符串精确匹配的问题

[复制链接]

12

主题

38

帖子

316

积分

二级会员

Rank: 3Rank: 3

积分
316
发表于 2017-11-21 15:01:20 | 显示全部楼层 |阅读模式
现有

import console;  

string1=“李四,王五,张三,赵六”   
string2=“张三(北京)”   
string3=“(四川)张三”
string4=“张三”

console.log(
string.indexAny(string1,"string2")
);

console.log(
string.indexAny(string1,"string3")
);

console.log(
string.indexAny(string1,"string4")
);

console.pause(true);

感觉3个都能匹配,而精准匹配只有一个张三,有没有更好函数,或者方法?
回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-21 15:10:44 | 显示全部楼层
string.indexAny() 查找的是“字节“,
你要明白一个“字符”可以包含多个字节。

人家找的是字节,你让他找字符就算了,
你还要让他找字符串,你要让他找字符串就罢了,你还让他找一打的字符串,
你让他找一打的字符串就算了,关键是你连拆分都没拆分。

再好的函数,也不可能任何东西都能丢进去,任何东西都能生出来。
回复

使用道具 举报

12

主题

38

帖子

316

积分

二级会员

Rank: 3Rank: 3

积分
316
 楼主| 发表于 2017-11-21 15:15:43 | 显示全部楼层
import console;  


test=function( str){

string1="李四,王五,张三,赵六"   

tab=string.split(string1,",")

for(i=1;#tab;1){
   
if(tab[ i ]=str) {        
return true;
}else {
return false;
}
}
       
}


console.log(
test("张三")
);

console.log(
test("(四川)张三")
);

console.log(
test("张三(北京)")
);  

console.pause(true);
回复

使用道具 举报

12

主题

38

帖子

316

积分

二级会员

Rank: 3Rank: 3

积分
316
 楼主| 发表于 2017-11-21 15:16:57 | 显示全部楼层
返回的还是 false,搞不定了
回复

使用道具 举报

12

主题

679

帖子

4005

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4005
发表于 2017-11-21 15:55:45 | 显示全部楼层

你这返回值写在for循环里 tab[1]判断不等于 就返回了
下面的值都没判断...

你给个 "李四" 试试看?
console.log(test("李四"));
回复

使用道具 举报

12

主题

38

帖子

316

积分

二级会员

Rank: 3Rank: 3

积分
316
 楼主| 发表于 2017-11-21 16:19:16 | 显示全部楼层
换了思路,参考论坛,换了个函数    string.match("李四,王五,张三,赵六,","张三,"); 就可以了,真的,简单粗暴,不知道有没有更好的方法。
回复

使用道具 举报

12

主题

679

帖子

4005

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4005
发表于 2017-11-21 16:30:30 | 显示全部楼层
bjtv 发表于 2017-11-21 16:19
换了思路,参考论坛,换了个函数    string.match("李四,王五,张三,赵六,","张三,"); 就可以了,真的,简单 ...

import console;

var s = "李四,王五,张三,赵六";
ok = string.find( s,  
"张三" )
if(ok) console.log("找到了张三")

console.pause(
true);

回复

使用道具 举报

8

主题

45

帖子

276

积分

二级会员

Rank: 3Rank: 3

积分
276
发表于 2017-11-21 16:37:19 | 显示全部楼层
逻辑混乱。。。
import console;  

test =
function(str){
   
var string1 = "李四,王五,张三,赵六"
   
var tab = string.split(string1, ",")
   
for(i=1;#tab){
        
if(string.indexOf(str, tab[ i ])){        
            
return true;
        }
    }
   
return false
}

console.log( test(
"张三") );
console.log( test(
"(四川)张三") );
console.log( test(
"张三(北京)") );  

console.pause(
true);

回复

使用道具 举报

12

主题

38

帖子

316

积分

二级会员

Rank: 3Rank: 3

积分
316
 楼主| 发表于 2017-11-21 16:43:23 | 显示全部楼层
你们都不对,我要的结果是精准匹配“张三”,“张三”前后多一个少一个字符都不行,上面的全找到了,所以不对,这种用于查询权限,全都有结果,变true就不行,只有一个是对的。
回复

使用道具 举报

8

主题

45

帖子

276

积分

二级会员

Rank: 3Rank: 3

积分
276
发表于 2017-11-21 16:48:15 | 显示全部楼层
bjtv 发表于 2017-11-21 16:43
你们都不对,我要的结果是精准匹配“张三”,“张三”前后多一个少一个字符都不行,上面的全找到了,所以不 ...

这样??

import console;  

test =
function(str){
   
var string1 = "李四,王五,张三,赵六"
   
var tab = string.split(string1, ",")
   
for(i=1;#tab){
        
if(str == tab[ i ]){        
            
return true;
        }
    }
   
return false
}

console.log( test(
"张三") );
console.log( test(
"(四川)张三") );
console.log( test(
"张三(北京)") );  

console.pause(
true);

回复

使用道具 举报

12

主题

679

帖子

4005

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4005
发表于 2017-11-21 16:59:09 | 显示全部楼层
本帖最后由 xauto 于 2017-11-21 17:07 编辑

[quote]bjtv 发表于 2017-11-21 16:43
好吧 你都没说你要干嘛
不过你说用 string.match 可以的
string.find 就一样可以
回复

使用道具 举报

3

主题

50

帖子

396

积分

培训班

积分
396
发表于 2017-11-21 18:35:52 | 显示全部楼层
一次不行就两次,,

1.先匹配出张三(别管几个)。
2.对比字符长度,相等就输出。
回复

使用道具 举报

3

主题

51

帖子

308

积分

二级会员

Rank: 3Rank: 3

积分
308
发表于 2017-11-22 08:17:55 | 显示全部楼层
  1. ===
复制代码
回复

使用道具 举报

4

主题

10

帖子

40

积分

新手入门

Rank: 1

积分
40
发表于 2017-11-22 09:02:07 | 显示全部楼层
楼主是想要比较字符串是否相等,所以并不想把字符串split
楼主找的应该是类似InStr()的函数。是吗?
回复

使用道具 举报

10

主题

88

帖子

503

积分

三级会员

Rank: 4

积分
503
发表于 2017-11-22 10:55:44 | 显示全部楼层
代码:
  1. import console;  

  2. test=function( str){
  3.         string1="李四,王五,张三,赵六"   
  4.         tab=string.split(string1,",")
  5.         for(k,v in tab){
  6.                 if(v==str) {  
  7.                         console.log("true",k,v)      
  8.                 }else {
  9.                         console.log("false",k,v)
  10.                 }
  11.         }
  12.         console.log("===============end================")
  13. }

  14. test("张三")
  15. test("(四川)张三")
  16. test("张三(北京)")

  17. console.pause(true);
复制代码


结果:
false   1       李四
false   2       王五
true    3       张三
false   4       赵六
===============end================
false   1       李四
false   2       王五
false   3       张三
false   4       赵六
===============end================
false   1       李四
false   2       王五
false   3       张三
false   4       赵六
===============end================
请按任意键继续 ...
~什么都会点,什么都不会~
回复

使用道具 举报

0

主题

24

帖子

168

积分

一级会员

Rank: 2

积分
168
发表于 2017-11-22 10:56:08 | 显示全部楼层
如果没理解错的话,是说 "用逗号分开的名字列表里精确包括另外一个名字",那么var contains= table.find(string.split("张三,李四,王五",","),s)>=1
回复

使用道具 举报

10

主题

88

帖子

503

积分

三级会员

Rank: 4

积分
503
发表于 2017-11-22 11:04:05 | 显示全部楼层
本帖最后由 mzky 于 2017-11-22 11:08 编辑

楼主可能想要的是这个
  1. import console;  

  2. string1="李四,王五,张三,赵六"   

  3. test=function( str){
  4.         tab=string.split(string1,",")
  5.         var istrue=false
  6.         for(k,v in tab){
  7.                 if(v==str) {  
  8.                         istrue=true
  9.                 }
  10.         }
  11.         if(istrue){
  12.                 return true;
  13.         }else {
  14.                 return false;
  15.         }
  16. }

  17. console.log('test("张三")',test("张三"))
  18. console.log('test("(四川)张三")',test("(四川)张三"))
  19. console.log('test("张三(北京)")',test("张三(北京)"))

  20. console.pause(true)
复制代码

结果:
test("张三")    true
test("(四川)张三")      false
test("张三(北京)")      false
请按任意键继续 ...
~什么都会点,什么都不会~
回复

使用道具 举报

12

主题

679

帖子

4005

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4005
发表于 2017-11-22 11:46:33 | 显示全部楼层
mzky 发表于 2017-11-22 11:04
楼主可能想要的是这个

结果:

test = function(name){
    tab = string.split(str,
",")
   
var istrue = false
   
for(k,v in tab) if(v == name) istrue = true
   
return istrue;
}

直接返回“istrue”就行了,没必要在if...else...

回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-22 12:17:31 | 显示全部楼层
bjtv 发表于 2017-11-21 16:19
换了思路,参考论坛,换了个函数    string.match("李四,王五,张三,赵六,","张三,"); 就可以了,真的,简单 ...


问题要表达明确,例如:

目的:你希望在字符串A中查找字符串B

输入数据格式:字符串A是由逗号分隔的的用户姓名。
输出数据格式:字符串B是“张三”这类的名字,名字可能包含括号、中文,但是不包含逗号(而且是半角的)。

示例代码:。。。。。。


大家回复都很热心,难能可贵。
但我们自己提问的时候尽量描述精确,节省他人的时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-9-22 23:30 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表