2012-12-12 7 views
0

我的模式在第一次匹配後停止,並且在那裏有全局匹配。Javascript正則表達式數組不匹配

//When I add [*]* like var pattern=/([^A-z0-9]|^|[*]*)_(\S.*?)_((?!\S)|\W)/g; 
// it works, but when I try to match "1_test1_" and "a_test1_" it matches "_test1_" 
// which I don't want. I know [*]* will match 0 or more instances of literal * 
// but [*]+ won't work due to the first match being "_test1_*" 

var pattern=/([^A-z0-9]|^)_(\S.*?)_((?!\S)|\W)/g; 

alert("_test1_*_test2_".match(pattern)); //=> _test1_* 
    //This should match "_test1_*" first then it should also add to the array with "_test2_" 

的問題開始

我想上述(第一碼塊)以提醒 「_test1 _ *,_ test2_」 ,我想在下面(第二碼塊)保持在相同(如commentend部分所示)。

我不知道爲什麼_test2_不匹配,因爲它與下面顯示的測試完全匹配。

問題FINISH

以下是測試和工作,他們應該。

alert("_test1_ _test2_".match(pattern)); //=> _test1_, _test2_ 
alert("_test1_*".match(pattern)); //=> _test1_* 
alert("_test2_".match(pattern)); //=> _test2_ 
alert("*_test2_".match(pattern)); //=> *_test2_ 
alert("1_test1_".match(pattern)); //=> null 
alert("a_test1_".match(pattern)); //=> null 
alert("_test1_1".match(pattern)); //=> null 
alert("_test1_a".match(pattern)); //=> null 
+0

你的問題到底是什麼?你可以編輯你的問題,讓實際問題更清楚嗎? – Ivan

+0

最上面的代碼給出了一個包含\ _test1_ *的數組,但我希望它具有[0] = \ _test1_ *和[1] = \ _test2_ – Reuben1st

+0

這只是令人困惑。請不要發佈,除非你有一個很好的說明你想要什麼。然後繼續嘗試構建你的問題,這是可以理解的。 (只是稍微瞭解你的問題的線索,我必須在你的問題中瘋狂地跳起來) –

回答

0

經過多次嘗試和錯誤的嘗試後,我終於找到了答案,加入| \ b。謝謝@Alih Nehpets你試圖回答我的問題。

([^A-z0-9]|^|\b)_(\S.*?)_((?!\S)|\W) 
0

我認爲模式應該改變。這個怎麼樣?打上問號之後的部分,你想下劃線之前的可選符號字符:

([^A-z0-9]|^)?_(\S.*?)_((?!\S)|\W) 
+1

這使「\ _test _ * _ test_」 _test _ *,\ _ test_)這就是我想要的。但是,它將「1_test1_」和「a_test1_」更改爲數組(\ _ test_),這不是我想要的(該數組應該爲null)。儘管如此,謝謝你的嘗試。 – Reuben1st

+0

第一個下劃線之前的信息可​​以是新行,空格或非字母數字字符的開始!@#$%^&*()和\ _ – Reuben1st

+0

我看到,確實會導致問題。這是否意味着,如果第一個字符序列是錯誤的,那麼在序列中不應該返回序列..? –

0

好那麼如何瞭解有關使用該序列,說不上如果你要找誰:

([^A-z0-9]|^|)_(\S.*?)_((?!\S)|\W)

我剛剛在正則表達式中的字符串開頭符號之後添加了一個額外的垂直行,正在測試您的非工作情況並且工作。

順便說一句,我使用regexpal.com來測試正則表達式。

+0

對不起,以上依然不起作用。也許一個解決方法是每兩個下劃線後面追加一個空格,這種奇怪的問題。 –

+0

是的,我嘗試添加| (管)之前,我發佈了這個問題。我只發佈這個問題,因爲我幾乎不知道爲什麼我只能得到一個匹配。我使用[http://www.gskinner.com/RegExr/](http://www.gskinner.com/RegExr/),它有一個很好的桌面版本。 – Reuben1st

+0

我明白了。是的,它真的令人困惑,爲什麼只有一場比賽。瘋狂的猜測,它的治療第一次匹配作爲無效的開始到第二次,因爲模式的限制只有在第一個下劃線之前的符號字符。對不起沒有幫助,希望有人發佈這個有趣的問題的解決方案。 –