![](/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.