![](/img/trans.png)
[英]regex to match the string and extract email and user name in javascript
[英]JavaScript match whole string user selected, skip email and URL
我尝试使用正则表达式匹配段落中的整个字符串(用户选择,可以是一个单词或多个单词)。
var str = 'myname this is my myname 18 my email is MyName@email.com 40 another email is support@MYNAME.com.au. 78 and my site is www.myname.com.au. 119 myname. 142 ..myname 154 [myname] 167 and myname\'s 184 mynamebefore 198 aftermynames 215 "myname" 231 \'myname\' 244 lastmyname';
function match(text, str) {
//need to change
var pattern = '(?=^|\\s|\\b)(' + text + ')(?=$|\\s|\\b)';
var regexp = new RegExp(pattern, "ig");
var idx = 0;
while ((match = regexp.exec(str)) != null) {
var offsetStart = parseInt(match.index);
console.log("--["+idx+"] ["+offsetStart+"]- textnode " + JSON.stringify(match, null, ' '));
idx++;
}
}
var selectText = 'myname';
match(selectText, str);
我想要的是看到下面的字符串已在字符串中突出显示。
' myname这是我的myname 18我的电子邮件是MyName@email.com 40另外一个电子邮件是support@MYNAME.com.au。 78,而我的网站是www.myname.com.au。 119我的名字 。 142 .. myname 154 [ myname ] 167和myname \\的184 myname,在198 aftermynames 215“ myname ” 231 \\' myname \\'244 lastmyname'
跳过电子邮件,跳过URL,返回已匹配的字符串,该字符串可以用空格或任何其他字符[^ a-zA-Z0-9]包裹,例如[],“,”“或's。
所有文本均为粗体,如myname将返回。
首先使用regexp "[^@.]"+text+"[^@.]"
匹配字符串
然后每个项目如代码forEach
所示。
然后返回字符串。
检查代码段
var str = 'myname this is my myname 18 my email is MyName@email.com 40 another email is support@MYNAME.com.au. 78 and my site is www.myname.com.au. 119 myname. 142 ..myname 154 [myname] 167 and myname\\'s 184 mynamebefore 198 aftermynames 215 "myname" 231 \\'myname\\' 244 myname'; function match(text, str) { var re=new RegExp("([^@a-zA-Z0-9]|^)"+text+"(\\.\\s|[^@a-zA-Z0-9.])","igm"); str.match(re).forEach(function(i,p){ str=str.replace(i,"<b>"+i+"</b>"); }); return str; } var selectText = 'myname'; document.writeln("Before<br /><br />"+str); document.write("<br /><br />After<br /><br />"+match(selectText, str));
您可以使用拆分联接来首先分离潜在的候选者,但这需要捕获异常,例如when .
用于网站中,因此首先要排除.
作为拆分字符,但是对于每个项目,请检查是否应根据其他规则将其包括在内(例如,如果进一步按.
拆分,则包含name
但不包含www
)。
例如:
const text = 'myname this is my myname ...';
const name = 'myname';
// used to check if a found value is indeed ok, excludes e.g. www. texts but keeps things like '..name'; can be customized and improved to better fit the case
const check = val => val === name ||
(val.split(/\./).some(_ => _ === name) && !val.split(/\./).some(_ => _ === 'www')) ;
const res = text
.split(/([^a-zA-Z0-9\.])/)
.map(val => check(val) ? `<b>${val}</b>` : val)
.join('');
这在您当前的情况下可行,可能就足够了。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.